.net加sql问题,哪位兄弟帮看看

roklba 2007-12-20 04:58:35
.net加sql问题,哪位兄弟帮看看

string idlist="3,32,33,34,35,36,37" ;

com.Parameters.Add("@idlist", System.Data.SqlDbType.NVarChar);
com.Parameters["@idlist"].Value=idlist;

sql+=" and id in (@idlist)"

错误:
将 nvarchar 值 '3,32,33,34,35,36,37' 转换为数据类型为 int 的列时发生语法错误。
...全文
177 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
rodgerluo 2007-12-21
  • 打赏
  • 举报
回复
cast(id as varchar(1024))
cast类型转换???
学习
ge127 2007-12-21
  • 打赏
  • 举报
回复
学习
raul_qu 2007-12-21
  • 打赏
  • 举报
回复
要注意的是@idlist,每个id间用逗号隔开
raul_qu 2007-12-21
  • 打赏
  • 举报
回复
我刚刚遇到了这个问题,哈哈,正好也刚刚解决掉,就看到你这个问题了,呵呵

sql+=" and cast(id as varchar(1024)) in (@idlist)"
fcuandy 2007-12-20
  • 打赏
  • 举报
回复
如果确实要传参的话,可以用like或charindex,不过一定要加前后辍,不然会造成数据错选.
不传参的话,可以拼SQL语句,就是 + 的写法.

id
1
11
2

本意为 select * from tb where id in(11,2)
如果不加前后辍直接 select * from tb where charindex(rtrim(id),'11,2')>0
会把1也取出来
所以必须是 select * from tb where charindex(','+rtrim(id)+',',',11,2,')>0
实际上进行的是
,1,
,11,
,2,
这三行与 ,11,2,的比较, 这样就不会取错了.
like 加前后辍同理.

拼嘛,就看是在cs里拼,还是sql里拼了.cs里拼上面都说了.
sql里拼就是
exec('select * from tb where id in(' + @idlist + ')')
jacky530 2007-12-20
  • 打赏
  • 举报
回复
如果你是在c#代码里边应该写为: select * from table where id in + "(" + idlist + ")" ;
xierfly 2007-12-20
  • 打赏
  • 举报
回复
in (@idlist)
@idlist就是一个int 的sql变量。

如果你要拼接sql就不要参数。
sql+=" and id in ("+idlist +")"; 注意对idlist的数据检查。

这个方法可以用,主要是利用循环,多次拼接成多个语句,你如果直接传入参数当然不行了。
chehw 2007-12-20
  • 打赏
  • 举报
回复
SQL语法中的参数查询没这种用法。

参数查询可以用在如 WHERE id=@id AND name=@name 这样的场合,
对于in (x,x,x) 你需要的是自己构造sql字符串而不是传递参数。

jiangshun 2007-12-20
  • 打赏
  • 举报
回复
我昨天也遇到了这样的问题!
http://topic.csdn.net/u/20071219/15/19e8ae4e-98ee-4df9-868d-fb12d39c49c6.html
这里面有详细的讲解!
lovehongyun 2007-12-20
  • 打赏
  • 举报
回复
把一些不合法的字符去了.或是发现这些字符不让执行..
拉达曼迪斯II 2007-12-20
  • 打赏
  • 举报
回复
数据和DBTYPE 类型不匹配。
你那串明显是STRING,但是参数类型是INT, 自然不行。
roklba 2007-12-20
  • 打赏
  • 举报
回复
没写过检查的代码,是不是只要把'换成"就可以了?
cpp2017 2007-12-20
  • 打赏
  • 举报
回复
怕注入所以就要进行检查。
roklba 2007-12-20
  • 打赏
  • 举报
回复
idlist接收外部的参数拼成,怕直接拼会注入?
cpp2017 2007-12-20
  • 打赏
  • 举报
回复
没有这个做的。
in (@idlist)
@idlist就是一个int 的sql变量。

如果你要拼接sql就不要参数。


sql+=" and id in ("+idlist +")"; 注意对idlist的数据检查。
lovehongyun 2007-12-20
  • 打赏
  • 举报
回复
不能这样写..

你可以这样

select * from xxx where id in ("+idlist+")

62,244

社区成员

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

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

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

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