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

标签 c# .net 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();
        }

问题是,这段代码会生成:

exec sp_executesql N'delete from MyTable where TableID in ( @tableID)',N'@tableID nvarchar(17)',@tableID =N'1,2,3,4,5,6,7,8,9'

这会失败,因为:

Conversion failed when converting the nvarchar value '1,2,3,4,5,6,7,8,9' to data type int.

知道如何解决这个问题吗?谢谢。

编辑:我正在使用 MS SQL 2012

最佳答案

你应该使用 TVP , 这样您就可以完全按照指定的方式保留查询。它们是在 SQL 2008 中引入的。

Table Valued Parameter, with example

关于c# - 如何在 C# 中使用 List<int> 作为 SQL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546300/

相关文章:

c# - .Net 注册表安全权限 - 具有权限的用户无法访问注册表

c# - 将对象连同静态成员变量序列化为 XML

c# - 如何验证分类广告?

c# - 如何通过 C# 中的异常处理理解 "using"的 JITed 代码

c# - 在 XAML 页面之间传递值

sql - Oracle - 创建更新另一个表的触发器时出现问题

mysql - 如何在一个查询中包含三个不同的表数据

c# - 在序列化时将字符串属性值转换为 base64

c# - Linq DELETE 在 SQL Server 中生成 UPDATE 查询

MySQL使用nodeJs嵌套Json对象