使用 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 插入位数据类型进行批量数据插入

Power BI Desktop 出现 Npgsql 3.0.3 错误

Npgsql 按名称将参数传递给存储的函数