相关疑难解决方法(0)

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();
Run Code Online (Sandbox Code Playgroud)

我的存储过程是相当标准的但是加入了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>
Run Code Online (Sandbox Code Playgroud)

但是,字符串列表是动态的,几百长.

有没有办法将字符串列表传递List<string> …

c# sql stored-procedures

105
推荐指数
3
解决办法
17万
查看次数

创建和填充数字表的最佳方法是什么?

我已经看到了许多不同的方法来创建和填充数字表.但是,创建和填充一个的最佳方法是什么?从最重要到最不重要的"最佳"被定义:

  • 使用最佳索引创建的表
  • 行生成最快
  • 用于创建和填充的简单代码

如果你不知道数字表是什么,请看这里:我为什么要考虑使用辅助数字表?

sql-server sql-server-2005

62
推荐指数
6
解决办法
9万
查看次数

如何在C#中使用List <int>作为SQL参数

我试图List< int>使用此代码作为SQL参数:

var listID= new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        using (var sqlConnection = new SqlConnection(_connectionstring))
        {
            using (var cmd = new SqlCommand())
            {
                cmd.Connection = sqlConnection;
                cmd.CommandText = "delete from MyTable where TableID in ( @tableID)";

                string param = String.Join(",", listID.ToArray());
                cmd.Parameters.Add("@tableID", param);
                sqlConnection.Open();
                cmd.ExecuteNonQuery();
            }
            sqlConnection.Close();
        }
Run Code Online (Sandbox Code Playgroud)

问题是,此代码将生成:

exec sp_executesql来自MyTable的N'delete,其中TableID位于(@tableID)',N'@ tableID nvarchar(17)',@ tableID = N'1,2,3,4,5,6,7,8,9'

这将失败,因为:

将nvarchar值'1,2,3,4,5,6,7,8,9'转换为数据类型int时转换失败.

不知道怎么解决这个问题?谢谢.

编辑:我正在使用MS SQL 2012

.net c# sql

3
推荐指数
1
解决办法
8314
查看次数

标签 统计

c# ×2

sql ×2

.net ×1

sql-server ×1

sql-server-2005 ×1

stored-procedures ×1