关于Dapper SQL查询和参数与PostgreSQL的问题[英] Questions about Dapper SQL queries and parameters with PostgreSQL

本文是小编为大家收集整理的关于关于Dapper SQL查询和参数与PostgreSQL的问题的处理方法,想解了关于Dapper SQL查询和参数与PostgreSQL的问题的问题怎么解决?关于Dapper SQL查询和参数与PostgreSQL的问题问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我目前正在学习 Dapper.我在这里和其他地方(包括 this)搜索了很多,但我找不到具体的回答我的疑问:

¿Dapper 是使用通用 SQL 方言还是特定于 DB 引擎?我的意思是,它使用底层数据库引擎中预期的 SQL 语法?起初,在阅读了十几个示例之后,我认为 SQL 查询是通用的,但现在尝试使用 PostgresSQL ODBC,我遇到了语法和参数方面的问题.

使用这个示例 POCO 类 ...

public class CardType {

    //Autoincremented Key
    public int Id { get; set; }

    public string Type { get; set; }

    public string Description { get; set; }
}

...以下行对我不起作用:

_connection.Execute(@"INSERT cardtypes (type, description) VALUES (@Type,  @Description)", cardType);

首先,此行引发 ODBC 异常,因为在指定表之前需要子句"INTO".参数也不起作用,因为如果我没记错的话,PostgresSQL 参数是用"?"设置的.符号而不是"@keyword".在 GitHub 页面上我们可以找到:

<块引用>

Dapper 没有特定于数据库的实现细节,它适用于所有.NET ADO 提供程序,包括 SQLite、SQL CE、Firebird、Oracle、MySQL、PostgreSQL 和 SQL Server.

所以我迷路了.:) 经过大量试验后,我发现把所有 PostgresSQL 的东西都按预期工作.例如,所有接下来的案例都有效:

//Manually parameters

var query = @"INSERT INTO cardtypes (type, description) values ('Administrator', 'The Boss')";
_db.Execute(query);


//Dynamic parameters

var dynamicParameters = new DynamicParameters();
dynamicParameters.AddDynamicParams(new {
    cardType.Type,
    cardType.Description
});

var query = @"INSERT INTO cardtypes (type, description) values (?, ?)";    //Note the '?' symbol
_db.Execute(query, dynamicParameters);


//Interpolating values
var query = $@"INSERT INTO cardtypes (type, description) values ('{cardType.Type}', '{cardType.Description}')";
_db.Execute(query);

这些以前的案例运行良好.但我对 SQL 查询是通用 SQL 方言还是特定数据库引擎方言感到困惑.

我也尝试过 Dapper.Contrib,但使用 INSERT 语句也失败了,例如:

_db.Insert(new CardType() {
    Type = "Administrator",
    Description = "The Boss"
});

它也失败了……一个奇怪的"["字符异常.

我做错了什么?

我的问候!

推荐答案

Dapper 不会尝试解析您的查询或提供自定义 DSL.而是:它将您的查询直接传递给您选择的 ADO.NET 提供程序.在某些情况下,它确实做了一些调整,但在一般意义上:它没有受到影响.

postgresql 的情况下,IIRC 参数是冒号前缀,而不是 at 前缀.尝试使用 :foo 而不是 @foo.

本文地址:https://www.itbaoku.cn/post/1763923.html

相关标签/搜索