奇怪的删除问题

woshimaikou 2011-04-22 10:43:23

做删除时遇到这么一个情况,当我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;
...全文
133 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
小河 2011-04-22
  • 打赏
  • 举报
回复
如果ID是数字型的 就直接写sql语句
string sql = "update SellData set isDel=1 where ID in (1,2,3,4,5)";
小河 2011-04-22
  • 打赏
  • 举报
回复
因为参数是string,生成sql代码为
string sql = "update SellData set isDel=1 where ID in (‘1,2,3,4,5’)";
所以会错
机器人 2011-04-22
  • 打赏
  • 举报
回复
少写个拼接
charindex(','+id+',', ',1,2,3,4,11,')
机器人 2011-04-22
  • 打赏
  • 举报
回复
因为解析成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'就能查出来。
我姓区不姓区 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 woshimaikou 的回复:]

引用 6 楼 ojlovecd 的回复:
像这种情况就不能用sql参数了,
string sql = "update SellData set isDel=1 where ID in ( "+ idString + " )";


为什么,那我传过去值是 1或其他单个ID 的时候怎么可以呢??
求解释
[/Quote]
很简单啊,因为这是一个参数,你传一串id的时候,就会把你这一串当成一个字符串处理,
也就是说他会在SellData中找ID等于"1,2,3,4"的记录,而不是找ID分别等于1,等于2,等于3等于4的记录。
而单个id的时候转成字符串还是一个id所以能查出来
天府荣城 2011-04-22
  • 打赏
  • 举报
回复
这个牵涉到sql数据库里面的类型不匹配,用程序传递的参数虽然和在数据库查询分析器看起来差不多,但是两个不通方式的参数类型是不一样的。所以导致你的sql语句不会成功。
woshimaikou 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ojlovecd 的回复:]
像这种情况就不能用sql参数了,
string sql = "update SellData set isDel=1 where ID in ( "+ idString + " )";
[/Quote]

为什么,那我传过去值是 1或其他单个ID 的时候怎么可以呢??
求解释
yzf86211861 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ojlovecd 的回复:]

像这种情况就不能用sql参数了,
string sql = "update SellData set isDel=1 where ID in ( "+ idString + " )";
[/Quote]
用这个 吧
如果 ID a,b,c,d 是字符型的 记得 都加 "a","b","c","d" 号. 数值型可以不加
wtj2832 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fangxinggood 的回复:]

in 不能这么用。。。换个思路用 charindex(id, @idstring) > 0 (id要转成字符)
[/Quote]
那样会报错的,换个思路,或者直接把值丢到sql里拼好语句再到数据库处理,如楼上那样
hch126163 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ojlovecd 的回复:]

像这种情况就不能用sql参数了,
string sql = "update SellData set isDel=1 where ID in ( "+ idString + " )";
[/Quote]
+++
我姓区不姓区 2011-04-22
  • 打赏
  • 举报
回复
像这种情况就不能用sql参数了,
string sql = "update SellData set isDel=1 where ID in ( "+ idString + " )";
fk1984316 2011-04-22
  • 打赏
  • 举报
回复
顶下了先!
itrefer 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fangxinggood 的回复:]

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

这样是有bug的老兄
woshimaikou 2011-04-22
  • 打赏
  • 举报
回复
我的ID是INT的 传过来的值是"1,2,3,4,5"
小童 2011-04-22
  • 打赏
  • 举报
回复
如果你的id是string的,那么idString="'1','2','3'";
如果是int必须是idString="1,2,3";


打上断点,看你的idString

机器人 2011-04-22
  • 打赏
  • 举报
回复
in 不能这么用。。。换个思路用 charindex(id, @idstring) > 0 (id要转成字符)
白云任去留 2011-04-22
  • 打赏
  • 举报
回复
楼上都说了,这种情况就不要用参数了。动态拼接sql语句吧
arecaiz 2011-04-22
  • 打赏
  • 举报
回复
不参数化就OK

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧