做删除时遇到这么一个情况,当我idString传入值是单个值如:1或2或3的时候可以执行成功
但是当我传入 1,2,3,4,5 这样的字符串是就不会成功 为什么呢???string sql = "update SellData set isDel=1 where ID in ( @idstring )";
 OleDbParameter op = new OleDbParameter("@idstring", OleDbType.VarChar, 200);
  op.Value = idString;

解决方案 »

  1.   

    in 不能这么用换个思路用 charindex(id, @idstring) > 0 (id要转成字符)
      

  2.   

    如果你的id是string的,那么idString="'1','2','3'";
    如果是int必须是idString="1,2,3";
    打上断点,看你的idString
      

  3.   

    我的ID是INT的 传过来的值是"1,2,3,4,5"
      

  4.   

    像这种情况就不能用sql参数了,
    string sql = "update SellData set isDel=1 where ID in ( "+ idString + " )";
      

  5.   

    那样会报错的,换个思路,或者直接把值丢到sql里拼好语句再到数据库处理,如楼上那样
      

  6.   

    用这个 吧 
     如果  ID  a,b,c,d 是字符型的 记得 都加 "a","b","c","d" 号.  数值型可以不加
      

  7.   

    这个牵涉到sql数据库里面的类型不匹配,用程序传递的参数虽然和在数据库查询分析器看起来差不多,但是两个不通方式的参数类型是不一样的。所以导致你的sql语句不会成功。
      

  8.   

    很简单啊,因为这是一个参数,你传一串id的时候,就会把你这一串当成一个字符串处理,
    也就是说他会在SellData中找ID等于"1,2,3,4"的记录,而不是找ID分别等于1,等于2,等于3等于4的记录。
    而单个id的时候转成字符串还是一个id所以能查出来
      

  9.   

    因为解析成sql 是  id in ('1,2,3,4') 而不是想象中的 id in (1,2,3,4) 或者 id in ('1','2','3','4') 要么用拼字符,要么转成char用charIndex,最好是两边都加上","比如最好形成 charindex(id, ',1,2,3,4,11,') 如果id='1'就能查出来。
      

  10.   

    少写个拼接
    charindex(','+id+',', ',1,2,3,4,11,')
      

  11.   

    因为参数是string,生成sql代码为
    string sql = "update SellData set isDel=1 where ID in (‘1,2,3,4,5’)";
    所以会错
      

  12.   

    如果ID是数字型的  就直接写sql语句
    string sql = "update SellData set isDel=1 where ID in (1,2,3,4,5)";
      

  13.   

    楼上都说了,这种情况就不要用参数了。动态拼接sql语句吧