jol*_*r23 4 c# sql oracle sqlparameter dapper
我正在尝试重新编写一些代码以使用 Dapper,以便我可以轻松使用参数。我正在尝试在 Oracle 数据库上执行 UPDATE 语句。要更新的列表IDs作为参数传入List<int>。我想为每个IDs传入的字段更新一个字段。以下是我所拥有的:
OracleConnection connection = ... // set earlier
public int IncreaseProcessCount(List<int> ids)
{
var rowsAffected = connection.Execute(@"UPDATE TABLE SET PROCESSED_COUNT = PROCESSED_COUNT + 1 WHERE ID IN @ids", new { ids });
return rowsAffected;
}
Run Code Online (Sandbox Code Playgroud)
在使用 Dapper 之前,执行语句运行得很好。现在我收到以下错误:
ORA-00936: 缺少表达式。
我当前的解决方案基于以下帖子:
我不确定这是否是 Oracle 特有的问题,因为我从未使用过 Oracle + Dapper 组合。但我强烈怀疑你传递参数的方式有问题。例外“缺少表达”说的是同样的事情。
请参阅下面的代码修改:
public int IncreaseProcessCount(int[] ids)
{
var rowsAffected = connection.Execute(@"UPDATE TABLE SET PROCESSED_COUNT = PROCESSED_COUNT + 1 WHERE ID IN :ids", new { ids });
return rowsAffected;
}
Run Code Online (Sandbox Code Playgroud)
有以下区别:
:ids”代替“ @ids”。我强烈怀疑这是一个问题,因为 Oracle 需要:而不是@参数。int[]代替List<int>. 这应该不是问题,因为 Dapper支持 IEnumerable参数列表;所以List应该没问题。您已经尝试过此操作(正如您在评论中提到的)但没有成功。请参阅此问题以了解使用参数列表的 Dapper withIN子句。这是另一个资源。
问题的核心是使用“ :ids”,它已正确包含在我的答案中。我刚刚更正了上面代码中的语法错误。
另外,我一般都用DynamicParameters. 实际上,在这种情况下这不是问题,所以我删除了答案第一个版本中存在的部分。DynamicParameters无论如何,下面是应该同样工作的代码。
public int IncreaseProcessCount(int[] ids)
{
var param = new DynamicParameters();
param.Add(":ids", ids);
var rowsAffected = connection.Execute(@"UPDATE TABLE SET PROCESSED_COUNT = PROCESSED_COUNT + 1 WHERE ID IN :ids", param);
return rowsAffected;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6711 次 |
| 最近记录: |