我使用的是ServiceStack.ormLite.dll版本3.8.5.0。
我们正在使用postgreSql服务器。我们的postgreSQL服务器将locale设置为en-GB(在postgres.conf中我们将dateStyle参数设置为“ISO,DMY”)。
在我们的Web应用程序中,当我们将原始SQL语句传递为:
时 var insertSql = string.Format("insert into ReportTable values (
'{0}', '{1}',)",
message.Id, DateTime.Now);
并使用ExecuteSql(insertSql),我在postgres中获取日期范围过期,因为日期在MDY中,数据库需要DMY。
但是,如果我这样做:
var insertSql = string.Format("insert into ReportTable values (
'{0}', 'now',)",
message.Id);
插入有效。
我知道我可以设置
<globalization Culture="en-GB"/>
但是,我有一些线程可以进行一些后台处理,我也必须改变他们的文化才能使其正常工作。
如果有任何其他方法我可以在ormLite库上解决此问题吗?
答案 0 :(得分:1)
您必须按照postgreSQL(或任何相关的RDBMS)的预期格式DateTime.Now
格式化。
var insertSql = string.Format("insert into ReportTable values (
'{0}', '{1:your format here}',)",
message.Id, DateTime.Now);
例如,如果您的RDBMS期望日 - 月 - 年格式的日期,那么您需要传递此信息:
var insertSql = string.Format("insert into ReportTable values (
'{0}', '{1:dd-MM-yyyy}',)",
message.Id, DateTime.Now);
当然你也可以像Jon Skeet建议的那样使用参数对象,尽管你可能有理由想要使用string
。