2010-08-11 110 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