作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这就是我尝试过但失败了的:
string sql = "... WHERE [personID] IN (@sqlIn) ...";
string sqlIn = "1,2,3,4,5";
SqlCeCommand cmd.Parameters.Add("@sqlIn", SqlDbType.NText).Value = sqlIn;
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
da.Fill(ds); // > Error
错误详情:
The ntext and image data types cannot be used in WHERE, HAVING, GROUP BY, ON, or IN clauses, except when these data types are used with the LIKE or IS NULL predicates.
我不能将所有 ID 作为一个参数传递吗?我应该将所有 ID 一个一个地添加吗?
P.S: 注意SqlCE
最佳答案
您不能将其参数化为单个参数。您的查询正在对单个 值进行“输入”,因此本质上是:
... Where personId = '1,2,3,4,5'
(提供或接受参数)。这通常也是一个无效或次优等式测试,当然不是您要查询的内容。
选项;
最后一个是最可靠的,“dapper-dot-net”有一个内置的功能可以为你做这件事(因为它通常需要):
int[] ids = ...
var rows = conn.Query<SomeType>(
@"... Where Id in @ids",
new { ids }).ToList();
当通过 dapper-dot-net 运行时,将为“ids”中的每个项目添加一个参数,为其赋予正确的值等,并修复 SQL 以便其执行,例如:
"... Where Id in (@ids0, @ids1, @ids2)"
(如果“ids”中有 3 个项目)
关于c# - 如何使用 IN sql 关键字构建参数化查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8646475/
我是一名优秀的程序员,十分优秀!