参数类型必须一致

in @id 改成 in=any(@id)

cannot cast type text[] to regclass

我目前正在了解Dapper。我在这里和其他地方(包括此)进行了很多搜索,但找不到具体内容我的疑问的答案:

¿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"
});
文档更新时间: 2023-06-25 19:33   作者:admin