0

一部のエンド ユーザーが Windows 10 にアップグレードするまで、WinForms プログラムで次の SQL クエリを長い間問題なく使用してきました。

「エラー [22007] [Microsoft] [SQL Server Native Client 11.0] [SQL Server] varchar データ型から datetime データ型への変換により、範囲外の値が発生しました。」」という例外が突然発生します。

このエラーは以前にここに投稿されていましたが、発生が Windows 10 のアップグレードに関連しているという投稿は見つかりませんでした。

このクエリは、Native Client 11 を使用して SQL サーバー 2012 を対象としています。Windows 7 および 8 では機能しますが、Windows 10 では例外がスローされます。

SELECT DISTINCT tblEmployee.EmployeeID, tblEmployee.Lastname, (COALESCE(tblEmployee.Firstname, '') + ' (' + COALESCE(tblEmployee.EmployeeIDText, '') +')' ) AS Firstname 
FROM tblEmployee 
LEFT JOIN tblAssignmentService ON tblEmployee.EmployeeID = tblAssignmentService.EmployeeID 
WHERE tblAssignmentService.ServiceDate >= '2015-08-31 00.00.00' 
AND tblAssignmentService.ServiceDate < '2015-09-07 00.00.00' 
ORDER BY tblEmployee.Lastname;

DateTime フィールドが使用される唯一の場所は Where 句であり、クエリは Windows 8 クライアントを使用して同じ DB に対して正常に機能します。どちらのクライアントも Einglish Windows バージョンを実行します。もう 1 つの興味深い観察結果は、クエリが Windows 10 マシン上の Microsoft SQL Management Studio から受け入れられることです。ただし、ネイティブ クライアント経由ではありません。フィルターで使用される日付は、GUI を介してプログラムで作成されます。

他の誰かが Windows 10 のネイティブ クライアントで奇妙なことを経験したことがありますか、またはこの問題を解決する方法について誰か提案がありますか?

4

1 に答える 1

2

このスレッドで意図された解決策が私の問題を解決したことを確認します。

ToString("yyyy-MM-dd HH:mm:ss")調査の結果、実行時に現在のカルチャが「no」または「nb-NO」に設定されている場合、Windows 7 と Windows 10 で呼び出しの応答が異なることがわかりました( Thread.CurrentThread.CurrentCulture = new CultureInfo("no");)。

提案された変更はトリックを行いました: ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture). 時間形式のドットが根本的な原因であるため、これで問題は解決します。

しかし、ToString("yyyy-MM-dd HH:mm:ss") は、OS に応じて同じカルチャで異なる書式を返す必要がありますか? :O これはちょっと怖いです。

于 2015-08-31T15:30:24.800 に答える