【发布时间】:2014-09-26 21:27:25
【问题描述】:
我正在从我的 C# 代码调用 SQL Server 存储过程:
using (SqlConnection conn = new SqlConnection(connstring))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("InsertQuerySPROC", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
var STableParameter = cmd.Parameters.AddWithValue("@QueryTable", QueryTable);
var NDistanceParameter = cmd.Parameters.AddWithValue("@NDistanceThreshold", NDistanceThreshold);
var RDistanceParameter = cmd.Parameters.AddWithValue(@"RDistanceThreshold", RDistanceThreshold);
STableParameter .SqlDbType = SqlDbType.Structured;
NDistanceParameter.SqlDbType = SqlDbType.Int;
RDistanceParameter.SqlDbType = SqlDbType.Int;
// Execute the query
SqlDataReader QueryReader = cmd.ExecuteReader();
我的存储过程是相当标准的,但与QueryTable 连接(因此需要使用存储过程)。
现在:我想将字符串列表List<string> 添加到参数集。例如,我的存储过程查询是这样的:
SELECT feature
FROM table1 t1
INNER JOIN @QueryTable t2 ON t1.fid = t2.fid
WHERE title IN <LIST_OF_STRINGS_GOES_HERE>
但是,字符串列表是动态的并且有几百长。
有没有办法将字符串列表List<string> 传递给存储的过程???或者有更好的方法吗?
非常感谢, 布雷特
【问题讨论】:
-
SQL Server 的版本是什么? 2005 年?? 2008 年?? 2008 R2 ?? SQL Server 2008 及更高版本具有“表值参数”的概念(有关详细信息,请参阅 Redth 的回复)
-
无关提示:SqlDataReader 也是 IDisposable 所以应该在
using块中。
标签: c# sql stored-procedures