为了账号安全,请及时绑定邮箱和手机立即绑定

C#SQL Server - 将列表传递给存储过程

C#SQL Server - 将列表传递给存储过程

慕森卡 2019-08-06 15:39:21
C#SQL Server - 将列表传递给存储过程我从我的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>给存储过程??? 或者有更好的方法吗?
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

不,数组/列表不能直接传递给SQL Server。

可以使用以下选项:

  1. 传递以逗号分隔的列表,然后在SQL中使用函数拆分列表。逗号分隔列表很可能作为Nvarchar()传递

  2. 传递xml并在SQL Server中有一个函数解析列表中每个值的XML

  3. 使用新定义的用户定义表类型(SQL 2008)

  4. 动态构建SQL并将原始列表作为“1,2,3,4”传递并构建SQL语句。这很容易发生SQL注入攻击,但它会起作用。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 971 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信