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

Cha*_*bub 3 .net c# 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

Mat*_*hew 8

您应该使用TVP,而不是完全按照指定保留查询.它们是在SQL 2008中引入的.

表值参数,带示例

  • 鉴于OP正在谈论SQL2012,这是要走的路.+1 (2认同)