sql语句用'in'执行多条语句时候,执行错误的解决方法

一般报错是出现,无法将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 里面!

 

 

转载于:https://www.cnblogs.com/crazyair/p/3674952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值