【问题标题】:Dapper.net Oracle parameterDapper.net Oracle 参数
【发布时间】:2014-01-08 23:02:29
【问题描述】:

我正在尝试将 Dapper.net 与 Oracle 一起使用。

post 我了解到我们可以使用不带前缀的参数,然后 dapper 将同时适用于 sql serveroracle

如果没有明确的 oracle 命名参数前缀 :,我很难让它工作

以下查询

sqlConnection.Query("Select * FROM document WHERE id = param1", new { param1 = 963 });

抛出ORA-00904: "PARAM1": invalid identifier

如果我尝试使用 @ 前缀,它会抛出 ORA-00936: missing expression

如果我使用 : 前缀,它会按预期工作。但是我不希望我的查询依赖于(尽可能)依赖于 Oracle 或 Sql Server

我使用的是最新的 nuget 包版本 Dapper.dll 1.12.1.1

我做错了什么还是我误解了post

【问题讨论】:

    标签: oracle dapper


    【解决方案1】:

    是的,您误解了帖子。 SQL 按原样传递,并且必须包含正确的:param1@param1 等。“没有前缀完全”是指你没有的代码请参阅 - 具体来说,确保代码确实(通过某种机制):

    cmd.Parameters.Add("param1", 963);
    

    cmd.Parameters.Add("@param1", 963);
    

    cmd.Parameters.Add(":param1", 963);
    

    第一个(无前缀)是正确且首选的选项。

    如果您希望代码中的 SQL 与参数无关,可以使用此处的信息:Get the parameter prefix in ADO.NET

    但是,SQL 很少接近,仅查找参数前缀就可以解决所有问题。

    【讨论】:

    • 非常感谢您的洞察力。
    • 我知道这是一篇旧帖子,Contrib 可能是在它之后出现的。您的答案如何与我不管理该角色的 Dapper.Contrib 相符?剩下的就是放弃 Contrib,或者换掉 @ 字符,或者使用 String.Format 将文字值注入 SQL 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多