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