Fer*_*uez 7 postgresql json dapper nancy .net-core
标题几乎解释了它.否则一切正常,我可以使用Dapper从我的应用程序INSERT/ UPDATE/ DELETE/ SELECT没有问题.我遇到的具体问题是在尝试将INSERT值放入我的表格时.
我已经尝试了几种不同的方法,似乎找不到一个能够正确地将JSON值插入到我的PostgreSQL数据库中的方法.我总是得到错误,我试图插入TEXT数据库所需的类型值JSON.
为简洁起见,我将尝试仅包含相关的代码片段.
以下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" ] }');
Run Code Online (Sandbox Code Playgroud)
格式化有点偏 - 但你可以看到我基本上只是在字符串中有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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,该程序似乎试图完成我在pgAdmin中手动执行的完全相同的操作.我的猜测是Dapper强制类型或告诉postgre string对应的东西text,这就是我收到错误的原因?
我唯一的问题也是经过一番搜索,我不确定如何解决这个问题.
这是重要的一点: "<pre>Nancy.RequestExecutionException: Oh noes! ---< Npgsql.PostgresException: 22P02: invalid input syntax for type json
这里还有一个完整消息的屏幕截图:
那么,有人能指出我正确的方向吗?我是否需要将我的"OtherFields"作为已经序列化的传递JObject,以使其正常工作?我基本上已经尝试了SQL语法中我能想到的一切,包括转换为json(::json)和其他一些我甚至不记得的事情.
作为进一步的健全性检查:如果我从Dapper中的查询字符串中完全删除"OtherFields",那么之前的完全相同的请求就可以正常工作(并且具有讽刺意味的是返回"OtherFields",因为我Module写了我的方式).
TL; DR - 我需要JSON使用Dapper 将值插入到PostgreSQL数据库中.HALP.
欢迎任何帮助/建议!谢谢
我感觉自己好傻……
所以我以为我已经尝试了所有可能的转换语法,但显然没有。
在下面的代码中:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以看到我的类型列周围有单@OtherFields引号json。如果您尝试使用它进行转换,'@OtherFields'::json您仍然会收到完全相同的错误npgsql。 但是,如果您删除单引号(例如@OtherFields::json),完全相同的 API 请求现在可以正常工作。
我将保持这个开放,因为我仍然对传递已经序列化的对象的能力有点好奇,如果我不使用强制转换运算符,或者如果我必须将 值反序列 化并使用此处显示的强制转换。JObjectstring
如果有人可以对上述小问题提供解释和/或答案,我会将您的答案标记为“the”答案。
再次感谢!
| 归档时间: |
|
| 查看次数: |
4020 次 |
| 最近记录: |