gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:10:04 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com