【发布时间】:2017-08-17 18:59:45
【问题描述】:
标题几乎解释了它。否则一切正常,我可以使用 Dapper 从我的应用程序中INSERT/UPDATE/DELETE/SELECT 没有问题。我遇到的具体问题是尝试将 INSERT 值放入我的表中时。
我尝试了几种不同的方法,但似乎找不到一种可以将JSON 值正确插入到我的 PostgreSQL 数据库中的方法。我总是得到错误,我试图在数据库想要JSON 的地方插入TEXT 类型的值。
为简洁起见,我将尝试仅包含相关代码 sn-ps。
以下 RAW SQL 在 pgAdmin 中运行良好:
INSERT INTO public.sales(
firstname, lastname, middlename, address1, address2, city, state,
zipcode, dateofbirth, phonenumber, phonenumberalt, insurancename, insuranceid, binnumber, pcnnumber, groupid,
offerid, offercodes, timestamp, otherfields)
VALUES ('Fname', 'lname1', NULL, '123 ABC St', NULL, 'Washington DC', 'DC',
'10062', '1988-01-01', '9545555555', NULL, 'BCBS', 'XYZ123', '600100', 'ABC123', 'DC123',
'12', '10,50,12', '2017-03-24', '{ "guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a", "name": "Angela Barton", "is_active": true, "company": "Magnafone", "address": "178 Howard Place, Gulf, Washington, 702", "registered": "2009-11-07T08:53:22 +08:00", "latitude": 19.793713, "longitude": 86.513373, "tags": [ "enim", "aliquip", "qui" ] }');
格式化有点偏离——但你可以看到我基本上只是将 JSON 对象放在一个字符串中,并且它插入得很好。但是,当我尝试通过我的应用程序做我认为完全相同的事情时(使用NancyFX 和Dapper)。
这是数据访问/存储库代码以及显示正在发生的事情(和错误)的屏幕截图:
public void Add(Sale item)
{
string sQuery = "INSERT INTO Sales (firstname, lastname, middlename, address1, address2, city, state, zipcode, dateofbirth, phonenumber, phonenumberalt, insurancename, insuranceid, binnumber, pcnnumber, groupid, offerid, offercodes, timestamp, otherfields)"
+ " VALUES(@FirstName, @LastName, @MiddleName, @Address1, @Address2, @City, @State, @ZipCode, @DateOfBirth, @PhoneNumber, @PhoneNumberAlt, @InsuranceName, @InsuranceId, @BinNumber, @PcnNumber, @GroupId, @OfferId, @OfferCodes, @Timestamp, '@OtherFields')";
using(IDbConnection active = dbConn)
{
active.Open();
active.Execute(sQuery, item);
}
}
如您所见,该程序似乎正在尝试执行与我在 pgAdmin 中手动执行的完全相同的操作。我的猜测是 Dapper 强制类型或告诉 postgre string 对应于 text 这就是我收到错误的原因?
我唯一的问题也是经过一些搜索,我不确定如何解决这个问题。
这是重要的一点:"<pre>Nancy.RequestExecutionException: Oh noes! ---&lt; Npgsql.PostgresException: 22P02: invalid input syntax for type json
这里还有一个带有完整消息的屏幕截图:
那么,谁能指出我正确的方向?我是否需要将我的“OtherFields”作为已经序列化的JObject 传递才能使其正常工作?我基本上已经尝试了 SQL 语法中我能想到的所有内容,包括转换为 json (::json) 以及其他一些我什至现在都不记得的事情。
作为进一步的健全性检查:如果我从 Dapper 的查询字符串中完全删除“OtherFields”,那么之前完全相同的请求就可以正常工作(具有讽刺意味的是,由于我的 Module 编写方式返回了“OtherFields”) .
TL;DR - 我需要使用 Dapper 将 JSON 值插入到我的 PostgreSQL 数据库中。停下来。
欢迎任何帮助/建议!谢谢
【问题讨论】:
标签: json postgresql .net-core dapper nancy