一般报错是出现,无法将nvarchar类型转换为int类型 这是因为 SqlParameter 带参数 是不能用 , 分割的.
第一种解决方法就是 不用 SqlParameter 带参数的sql语句 但是 有危险
第二种就是
一 在数据库 执行 下面代码 创建一个函数
CREATE FUNCTION [dbo].[f_split](@c varchar(2000),@split varchar(2)) returns @t TABLE(col varchar(20)) AS begin while(charindex(@split,@c)<>0) begin INSERT @t(col) VALUES (substring(@c,1,charindex(@split,@c)-1)) SET @c = stuff(@c,1,charindex(@split,@c),'') end INSERT @t(col) VALUES (@c) RETURN end GO
第二 把原先的用in的sql语句
select * from DataTb where Number in (1,2,3)
改成
select * from DataTb where Number in (select * from dbo.f_split('1,2,3',','))
这样就可以了
上 实际代码 一个update的方法
s 是要修改的state的内容
str 是用checkbox或者什么 选择提出出来的 如: 1,2,3 类型的字符串
public void Update(string str, string s) { string sql = "update DataTb set [State]=@s where Number in(select * from dbo.f_split(@str,','))"; SqlParameter[] pars = { new SqlParameter("@s",s), new SqlParameter("@str",str) }; SqlHelper.ExecuteNonQuery(sql, pars); }
ExecuteNonQuery 方法在这个SqlHelper 里面!