一尘不染

通过C#中的参数在SqlCommand中的字符串列表

sql

在C#中使用SqlCommand,我创建了一个查询,其中在where子句中包含IN(列表…)部分。我不需要遍历我的字符串列表来生成列表,而是需要查询(如果您在sqlInjection中考虑,则很危险)。我以为我可以创建一个像这样的参数:

SELECT blahblahblah WHERE blahblahblah IN @LISTOFWORDS

然后在代码中,我尝试添加一个像这样的参数:

DataTable dt = new DataTable();
dt.Columns.Add("word", typeof(string));
foreach (String word in listOfWords)
{
    dt.Rows.Add(word);
}
comm.Parameters.Add("LISTOFWORDS", System.Data.SqlDbType.Structured).Value = dt;

但这是行不通的。

问题:

  • 我在尝试一些不可能的事情吗?
  • 我采取了错误的方法吗?
  • 我在这种方法上有错误吗?

谢谢你的时间 :)


阅读 245

收藏
2021-03-10

共1个答案

一尘不染

您尝试做的事情是可能的,但不能使用当前的方法。对于SQL Server
2008之前的所有可能解决方案,这是一个非常常见的问题,需要在性能,安全性和内存使用方面进行权衡。

此链接显示了SQL Server 2000/2005的一些方法

SQL Server 2008支持传递表值参数。

我希望这有帮助。

2021-03-10