0

SQL Server 2008にCreateDate(DateTime)という列があります。table1

ストアドプロシージャをCreateDate使用して、次のようにパラメータとして更新しようとします。

SqlParameter spdtCreateDate = cmd.Parameters.Add("@dtDreateDate", SqlDbType.DateTime);
spdtCreateDate.Value = dtCreateDate;

C#のアプリケーションから送信しますCreateDate='6/29/2012 12:00:00 AM'が、データベースをチェックインすると、代わりに次のようにCreateDate設定されます。2012-06-28 23:00:00.0002012-06-29 00:00:00.000

誰かが私に何が起こるか教えてもらえますか?

どうすればこの問題を解決できますか?

4

1 に答える 1

1

SQL Serverdatetimeタイプには、タイムゾーン情報は含まれていません。このため、SQL Serverクライアントライブラリは、常に現地時間を格納することを前提としています。.NETDateTime値をUTCタイムゾーンの値に設定している場合、SQLServerクライアントはそれを保存する前に現地時間に変換すると便利です。

可能な解決策:

  • .NETDateTime値を変更して、DateTimeKind.Unspecifiedまたはを指定しますDateTimeKind.Local
  • 表の列とsprocパラメーターのデータ型をdatetimeoffset(SQL 2008以降)に変更します。
于 2012-07-12T11:25:24.880 に答える