2010-08-11 33 views
0

我有一個UserID列表和一個到SQL Server的開放連接。如何循環訪問此列表並選擇與First_Name和Last_Name列匹配的UserID?我假設輸出可以在數據表中?使用C#從SQL數據庫中選擇表

千恩萬謝

+0

我正在使用SQL Server 2005 – Josh 2010-08-11 02:29:24

回答

0

這篇文章應該可以幫助您:http://msdn.microsoft.com/en-us/library/aa496058%28SQL.80%29.aspx

我用這個在過去創建一個存儲過程接受一個逗號分隔的VARCHAR參數。 我的來自C#程序的源代碼是一個檢查列表框,並且我使用foreach循環和一個StringBuilder構建逗號分隔的字符串來進行連接。可能有更好的方法,具體取決於列表中的項目數量。

回到SQL部分,文章中討論的fn_Split函數使您能夠將逗號分隔的字符串轉換回SQL Server可以理解的表變量...以及您可以在存儲過程中查詢哪些變量。

下面是一個例子:

CREATE PROCEDURE GetSelectedItems 
(
@SelectedItemsID Varchar(MAX) -- comma-separated string containing the items to select 
) 
AS 
SELECT * FROM Items 
WHERE ItemID IN (SELECT Value FROM dbo.fn_Split(@SelectedItemsIDs,',')) 

RETURN 
GO 

注意,你也可以使用內部聯接,而不是IN()如果你喜歡。

如果沒有fn_Split UDF在SQL Server上,你可以在這裏找到:http://odetocode.com/Articles/365.aspx

我希望這有助於。

3

它會略有不同哪種類型的SQL的你正在運行,但thisthis應該讓你開始。

+0

我已經完成了所有這些已經戴夫,謝謝。我在問如何使用列表中的值從SQL表中選擇。 – Josh 2010-08-11 02:32:17

+0

@Josh給出的鏈接討論通過C#運行SQL查詢,但他們還討論了建立連接所需的步驟。 @OMG Ponies提供您需要運行的查詢,並且我提供的鏈接應該很好。提示:查看提及SqlCommand的鏈接(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand。aspx) – 2010-08-11 02:36:38

+0

從OMG下面的信息(謝謝你)我不知道如何實現。它看起來像直接SQL,我不知道「你」是什麼。我希望看到某種循環將列表中的值與SQL表進行比較,並選擇適當的列值並將其輸出到數據表。 – Josh 2010-08-11 02:45:32

1

這樣做將是最方便的方法:

  1. 打開清單到包含逗號分隔的用戶ID的列表的字符串值
  2. 供應是CSV串入IN子句,像:

    SELECT u.first_name, 
         u.last_name 
        FROM USER_TABLE u 
    WHERE u.userid IN ([comma separated list of userids]) 
    

否則,你可能值插入到一個臨時表,並加入到用戶表:

SELECT u.first_name, 
     u.last_name 
    FROM USER_TABLE u 
    JOIN #userlist ul ON ul.userid = u.userid 
1

在你的SQL數據庫中寫一個名爲ParseIntegerArray的函數。這應該將逗號分隔的字符串轉換爲ID表,然後可以在查詢中加入到此表中。這也有助於避免您通過連接字符串來構建SQL所能獲得的任何SQL注入風險。在使用LINQ to SQL或LINQ to Entities時,您也可以使用此函數。

DECLARE @itemIds nvarchar(max) 
SET itemIds = '1,2,3' 

SELECT 
    i.* 
FROM 
       dbo.Item AS i 
    INNER JOIN dbo.ParseIntegerArray(@itemIds) AS id ON i.ItemId = id.Id