参数类型必须一致
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