我试图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