2011-04-27 50 views
0

假设我有叫一表“名称”如何选择SQL表的特定行,而不在.NET循环

ID | Name 
---+-------------- 
1 | Bob 
2 | Billy 
3 | James 
4 | John 
5 | Tom 
and on and on with thousands of names... 

假设我写了下面的.NET代码来检索名称:

public DataSet selectFromNames() 
    { 
     const string SQL_STATEMENT = 
     @"SELECT Id, Name From Names;"; 

     Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("MyConnection"); 

     DbCommand command = db.GetSqlStringCommand(SQL_STATEMENT); 
     command.CommandType = CommandType.Text; 
     command.CommandText = SQL_STATEMENT; 

     DataSet ds = db.ExecuteDataSet(command); 
     return ds; 
    } 

工作正常。如果我想要一个具有整型数组参数的函数来指定我想要检索的名称的行,该怎么办?我将如何编写该查询?

我很熟悉传递参数@parameter,但我不知道如何传递一个数组来使用字符串生成器来编写类似where ID in (1,2,3)这是丑陋的和容易出错的。

+0

可能重复的[参数化IN子句一个SQL?](http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause)如果你可能会发现SQL Server有用[http://www.sommarskog.se/arrays-in-sql.html](http://www.sommarskog.se/arrays-in-sql.html) – 2011-04-27 21:07:40

回答

0

建议使用SQL Server UDF来帮助您。这是一个article explaining how to implement this

基本上你会创建一个UDF将varchar()拆分为表变量。我们称之为dbo.MySplit()

,那么你可以:

string sql = "SELECT * FROM Table WHERE ID IN (SELECT Item FROM dbo.MySplitUDF(@csv));"; 
cmd.CommandText = sql; 
cmd.Parameters.AddWithValue("@csv", string.Join(",",myIntegerArray); 
0

这个怎么样(使用LINQtoSQL)?

//... 
int[] idList = new int[] { 1, 2, 3, 4 }; 
var myNames = from n in db.Names 
       where idList.Contains(n.ID) 
       select n; 

(从Creating IN Queries With Linq To SQL抬起)的