【问题标题】:Why does Dapper throw an OracleException when i run a query or command with parameters?当我运行带参数的查询或命令时,为什么 Dapper 会抛出 OracleException?
【发布时间】:2018-03-15 22:49:50
【问题描述】:

我是评估员,但我已经遇到了一些问题。

我正在尝试这样做

using (IDbConnection connection = GetConnection())
{
    connection.Open();
    var result = connection.Query(
        "select * from myTable where ID_PK = @a;", new { a = 1 });
}

它在 SqlMapper.cs 的第 393 行抛出 ORA-00936: missing expression OracleException

using (var reader = cmd.ExecuteReader())

当我删除参数时,我会将整个表放入结果变量中。

查询在 sqldeveloper 中没有问题。我正在使用 Oracle.DataAccess 程序集 2.112.2.0

【问题讨论】:

  • 我认为 oracle 对命名参数有不同的架构,您是否尝试过 :a 而不是 @a ?
  • 这是 dapper 中命名参数的架构。 Dapper 应该处理不同的 rdbms 模式
  • 好吧,我以为 Dapper 只是使用 Ado.Net,而且由于查询是字符串,所以参数的格式是相关的。由于我似乎没有足够的知识,所以最后一个提示:stackoverflow.com/questions/6212992/using-dapper-with-oracle 提到了 oracle 参数的问题(现在应该修复) - 也许你可以检查一下。祝你好运。
  • 好吧,我傻了。伯恩哈德,你是绝对正确的,它必须是:a 请输入你的第一条评论作为接受的答案。米(
  • 对我的评论投赞成票会很好,因为它似乎有帮助...

标签: oracle exception orm oracle11g dapper


【解决方案1】:

我认为 oracle 对命名参数有不同的架构,您是否尝试过 :a 而不是 @a

【讨论】:

  • 对我来说,这不是一个可以接受的答案。我需要 Dapper/Dapper.Contrib 与 Sql Server 和 Oracle 通用。 Contrib 是这里最严重的违规者,因为我不控制语句中的绑定参数。 @/: 字符应该由 Dapper 管理。仅支持 Oracle 时这是一个很好的答案,为此我投了赞成票。
【解决方案2】:

是的,如果我们尝试在 oracle 数据库表中插入记录,它可以与“:”一起使用。

试试这样:

var count = connection.Execute(@"INSERT INTO COMPANY_USER(UserId , UserName) values (:UserId, :UserName)", new[] { new { UserId = 1, UserName = "Sam" }, new { UserId = 2, UserName = "Don" }, new { UserId = 3, UserName = "Mike" } });

【讨论】:

    【解决方案3】:

    它也适用于 IN 列表:

    var partialList = new List();

    var list = await db.QueryAsync("select bla1, blah2 FROM 表名 WHERE stringcolumn1 IN :ListofValues", new { ListofValues = partialList });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-26
      • 2022-01-15
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多