使用 Daper.Net 和 NPGSQL 将数据插入 PostgreSQL jsonb 列
Posted
技术标签:
【中文标题】使用 Daper.Net 和 NPGSQL 将数据插入 PostgreSQL jsonb 列【英文标题】:Inserting data into PostgreSQL jsonb column with Daper.Net and NPGSQL 【发布时间】:2018-12-10 07:32:33 【问题描述】:我正在尝试使用 Dapper.Net 将 JSON 数据插入 JSONB PostgreSQL 列。
NPGSQL Documentation for JSONB 给出了使用NpgsqlDbType.Jsonb
数据类型的具体说明。
使用 Dapper,我尝试将其添加为自定义参数,但没有成功。
using (var conn = myconnection)
var sql = "INSERT INTO mytable (jsonbody) VALUES (@jb);";
dp = new DynamicParameters();
dp.Add("jb", stringOfJsonData, (DbType)NpgsqlDbType.Jsonb);
await conn.ExecuteAsync(sql,dp);
我收到的错误是
System.NotSupportedException : The parameter type DbType.36 isn't supported by PostgreSQL or Npgsql
关于如何将这两个库一起用于 JSONB 有什么建议吗?
谢谢。
【问题讨论】:
【参考方案1】:似乎将 SQL 语句更改为以下已修复它。
var sql = "INSERT INTO mytable (jsonbody) VALUES (CAST(@jb AS json));";
另外,不需要在参数映射中指定类型。
dp.Add("jb", stringOfJsonData)
【讨论】:
【参考方案2】:NpgsqlDbType 和 DbType 是两个不同的枚举,不能简单地将一个转换成另一个...
您必须在它创建和发送的 NpgsqlParameters 上设置 NpgsqlDbType 属性。 IIRC 有一种方法可以指定自定义参数。
【讨论】:
例如,您可以使用this overload of AddWithValue。或者自己实例化一个 NpgsqlParameter,设置它的 NpgsqlDbType 属性并将其添加到命令的参数集合中。以上是关于使用 Daper.Net 和 NPGSQL 将数据插入 PostgreSQL jsonb 列的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库(问题总结)
SQLCLR:如何将程序集 Npgsql.dll 添加到数据库?
一起使用 npgsql 12 和 ef 6 - 有人成功了吗?
在 NpgSql 中使用 BeginBinaryImport 插入位数据类型进行批量数据插入