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をdatetimeに変換中にエラーが発生しました。
問題を確認するために、次のステートメントを実行しました。
declare @DateTime datetime = '2012-04-15 19:52:55.7230000'
そしてメッセージを受け取りました:
メッセージ241、レベル16、状態1、行1
文字列から日付や時刻を変換するときに変換に失敗しました。
datetime2
SQL 2008 Expressデータベースで実行していますが、SQL 2005と互換性のあるスキーマが必要なため、簡単な回避策としてデータ型に切り替えるオプションがありません。
フォーマットはNHibernateよりもSQLADO.NETドライバーの一部であるように感じますが、NHibernateがどのようにステートメントを生成して、データベースが解析できるものにフォーマットを変更する必要があるかをより正確に尋ねる方法については十分にわかりません。 。
理想的には、文化関連の問題を回避するために、ISO 8601を使用するか、ANSISQLフォーマットを引き続き使用したいと思います。
この問題を修正するにはどうすればよいですか?