【问题标题】:Using : instead of @ for query parameters使用 : 而不是 @ 查询参数
【发布时间】:2016-06-27 17:33:23
【问题描述】:

我有一个使用 dapper 和 Oracle 的相当大的应用程序。现在,我想支持 SQL Server。

问题是我所有的查询都是用:而不是@写的,所以SQL Server抱怨:

':' 附近的语法不正确

是否可以告诉 Dapper 它应该将 : 替换为 @ 还是我必须在自己的代码中这样做?

【问题讨论】:

  • 您应该在代码中手动执行此操作。
  • Dapper 只是您的SqlConnectionOracleConnection 之上的一个非常薄 层——我非常怀疑它是否有任何替代参数命名约定的方法。那将是像实体框架这样的完整 ORM 可能会为您处理的事情

标签: sql-server dapper


【解决方案1】:

我发现直接使用 dapper 确实是不可能的:

Dapper.net Oracle parameter

Using Dapper with Oracle

抱歉重复了。

【讨论】:

    【解决方案2】:

    这不是内置的,但您可以通过编写自定义扩展方法并进行所需的任何调整来相对简单地提供它:

    public static IEnumerable<T> MyMagicQuery<T>(this IDbConnection conn,
        string query, object args = ...)
    {
        query = RunSomeRegexReplace(query);
        return conn.Query<T>(query, args, ...);
    }
    

    然而,虽然这方面的正则表达式并不是特别繁重,但更大的问题是 T/SQL 和 PL/SQL 都是 SQL 的不同的变体。当给出简单的直接翻译时,许多功能根本不起作用。其他功能可能有效,但需要不同的语法。第三组功能可能在语法上起作用,但给出不同的结果(是的,真的),或者具有非常不同的性能特征,除非重新编写以利用特定于 RDBMS 的偏好。

    从根本上说,在 RDBMS 之间进行更改不仅仅是将 @ 更改为 :

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2012-07-29
      • 1970-01-01
      • 2011-11-24
      • 2019-08-29
      相关资源
      最近更新 更多