数据库里必须是(‘111111’,‘11111112’)才能执行,用sqlparameter里的参数值是(111111,1111112),但是运行时不报错,ExecuteNonQuery返回值为0
string BM=id.TrimEnd(',');
string sql = "delete from tb_bookInfo where bookBarCode in(@code)";
SqlParameter[] para ={
new SqlParameter("@code",BM)
};
if(BLL.Delete.ExecuteNonQuery(sql,para)>0)
、、、、、、--------------------------------------------
SqlCommand comm = new SqlCommand(sql,co);
comm.Parameters.AddRange(para);
try
{
int i = comm.ExecuteNonQuery();
return i;
现在什么问题?
为啥是AddRange呢
我在数据里写的delete from tb_bookInfo where bookBarCode in('10200712131047','100011')
执行成功,
但是我vs里面的是delete from tb_bookInfo where bookBarCode in(@code)
@code的参数值为(10200712131047,100011)
@waiter: 应该没多大关系吧
可以认为长度只有1
@灬丶: 参数应该是 “'10200712131047','100011'”
按照 in()的要求 组好参数. 少什么加什么啊、、最多转意
我就是不知道怎么在里面加''这个符号
@灬丶: var arr =BM.split(',')
BM =string.Join(",", arr.Select(x=>"'"+x+"'").ToArray());
@Постой!: 我楼下都加好了。我就抄了。。
int[] arr = { 11, 22, 33 }; var result = string.Join(",", arr.Select(x=>"'"+x+"'").ToArray()); //'11','22','33'
多个的这种不要用参数形式,比如delete from tb_bookInfo where bookBarCode in(@code),如果一个可能不出错,多于1个肯定出错。。。。
反正Sqlserver 是不支持这样的写法。单独一个值不报错。多个肯定报错。。
delete from tb_bookInfo where bookBarCode in select mysplit(@code)
自己写个表集函数mysplit,把参数化为一个单一字段的表即可。
或者用系统函数Charindex,判断是否存在的方式
delete from tb_bookInfo where Charindex(convert(varchar,bookBarCode),@code,0)>0
这需要动态SQL
DECLARE @code NVARCHAR='11,22,33,55'; declare @sqls nvarchar(4000); SET @sqls=N'delete from tb_bookInfo where bookBarCode in('+@code+')' Exec sp_executesql @sqls;