我在使用 NHibernate 时遇到问题,在服务器上运行的语句在尝试使用DateTime
参数时失败。
参数被传递为'2012-04-15 19:52:55.7230000'
,但它的精度太高,无法转换为datetime
:
exec sp_executesql N'
INSERT INTO [People].[NameChanges]
(
Revision,
MadeAtDateTime,
MadeAtOffset,
MadeBy,
Title,
Forename,
Surname,
Person,
ID
)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8)',
N'@p0 int,
@p1 datetime,
@p2 bigint,
@p3 nvarchar(4000),
@p4 nvarchar(4000),
@p5 nvarchar(4000),
@p6 nvarchar(4000),
@p7 bigint,
@p8 uniqueidentifier',
@p0=0,
@p1='2012-04-15 19:52:55.7230000',
@p2=36000000000,
@p3=N'',
@p4=N'Mr',
@p5=N'Ezra',
@p6=N'Awesomesauce',
@p7=1969929945,
@p8='4D045A70-A474-4D36-8841-DDB16BBB147D'
消息 8114,第 16 级,状态 5,第 0 行
将数据类型 varchar 转换为日期时间时出错。
为了确认问题,我运行了以下语句:
declare @DateTime datetime = '2012-04-15 19:52:55.7230000'
并收到消息:
消息 241,第 16 级,状态 1,第 1 行
从字符串转换日期和/或时间时转换失败。
我在 SQL 2008 Express 数据库上运行,但我需要架构与 SQL 2005 兼容,因此这排除了切换到datetime2
数据类型的选项作为一种简单的解决方法。
感觉格式化比 NHibernate 更多地是 SQL ADO.NET 驱动程序的一部分,但是我对 NHibernate 如何生成语句以更精确地询问我需要去哪里将格式更改为数据库可以解析的内容知之甚少.
理想情况下,我想使用 ISO 8601 或继续使用 ANSI SQL 格式以避免任何与文化相关的问题。
我能做些什么来纠正这个问题?