ORMLite的ExecuteSQL调用中dateTime.Now的格式是什么?

时间:2014-02-21 14:06:34

标签: c# postgresql ormlite-servicestack

我使用的是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库上解决此问题吗?

1 个答案:

答案 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