c# - 如何使用 Dapper 的 Oracle 整数参数列表?

标签 c# sql oracle dapper sqlparameter

我正在尝试重新编写一些代码来使用 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;
}

在使用 Dapper 之前,执行语句工作得很好。现在我收到以下错误:

ORA-00936: missing expression.

我当前的解决方案基于以下帖子:

Dapper query with list of parametersPerforming Inserts and Updates with Dapper

最佳答案

我不确定这是否是 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;
}

有以下区别:

  1. 使用“:ids”代替“@ids。我强烈怀疑这是一个问题,因为 Oracle 期望 :而不是 @参数。
  2. 使用int[]而不是 List<int> .这应该不是问题,因为 Dapper supports IEnumerable对于参数列表;所以List应该可以。你已经尝试过这个(正如你在评论中提到的)但没有成功。

引用this关于 IN 的 Dapper 问题使用参数列表的子句。这是 another资源。

编辑(评论):

问题的核心是使用“: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;
}

关于c# - 如何使用 Dapper 的 Oracle 整数参数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48571835/

相关文章:

java - Hibernate:顺序获取行的最佳方式

c# - 具有表达式树的动态方法 : Simple property assignment fails

c# - 使用 WindowsXamlHost Overlay 托管 CaptureElement

c# - 在 C# 4.0 中实现 IEnumerable

java - 如何在 hibernate 中创建具有多个条件的内部连接

mysql - 在同一个 mysql 表中的 INSERT INTO 之后获取最后插入的 id(s) 的列表

c# - 为什么这些 C# 异步方法不执行过去的 Task.Delay()?

sql - 关于SQL Server锁定机制

python - 使用 cx_Oracle 插入 CLOB

sql - 获取组内每个条件的单独计数