我正在使用NLog 4.3.11运行应用程序。 NLog的数据库配置了日期列:
<target name="database" xsi:type="Database" dbProvider="System.Data.SqlClient" connectionStringName="${DbConnectionStringName}" commandText="INSERT INTO Log (Logged, Application, Class, Thread, LogLevel, Message, ExceptionDetails, ActivityId, LoggedInUser) Values (@Logged, @Application, @Class, @Thread, @LogLevel, @Message, @ExceptionDetails, @ActivityId, @LoggedInUser)">
<parameter name="@logged" layout="${date}" />
该程序已针对各种日期格式的德语和英语(美国)Windows Server 2012和2016安装进行了测试;在各种SQL Server(Full和Express)2012,2014和2016实例上没有问题。正确插入日期,并由SSMS以ISO格式正确显示:
2017-06-09 10:24:43.410
然而,在一个系统上,似乎交换了几个月和几天; SSMS显示如下:
2017-09-06 10:20:43.200
和MONTH(Logged)
也会以9
的形式返回,所以我想我可以排除SSMS的问题。
系统也是德国服务器2012系统,数据库是同一服务器上的SQL Server Express 2012,系统上的日期格式也是默认德语(d.m.Y)。日期正确设置为2017年6月9日
可能是什么问题;我怎么能告诉NLog以格式无关的方式记录当前日期?
答案 0 :(得分:2)
另一个选项是将日期值作为ISO 8601格式的值发送。
${date:format=O}
由于NLog数据库目标中的所有参数都是字符串值,因此使用正确的格式非常重要。
答案 1 :(得分:1)
使用命令
检查SQL Server选项dbcc useroptions
您有一个名为dateformat
的选项,此处应用了日期格式。
您可以使用GUI
SSMS - &gt;服务器属性 - &gt;高级选项卡 - &gt;默认语言
还使用SET DATEFORMAT命令
SET DATEFORMAT mdy;
另请查看此article了解详情