53

.NET DateTime (default(DateTime) の場合) を SqlDateTime に変換するときに、.NET の日付が SqlDateTime.MinValue と SqlDateTime.MaxValue の間にあるかどうかを常に確認する必要があります [または] これを行う良い方法はありますか。

4

6 に答える 6

96

日付が実際にその範囲外である可能性はありますか?それはユーザー入力から来ていますか?これらの質問のいずれかに対する答えが「はい」の場合は、常に確認する必要があります。そうしないと、アプリケーションでエラーが発生しやすくなります。

SQLステートメントに含めるために日付をフォーマットするのはかなり簡単です。

var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
于 2010-02-03T10:22:37.567 に答える
2

DBNULL をチェックしている場合、SQL Datetime を .NET DateTime に変換しても問題ありません。ただし、.NET DateTime を有効な SQL DateTime に変換するときに問題が発生する可能性があります。

SQL Server は、1753 年 1 月 1 日より前の日付を認識しません。イギリスがグレゴリオ暦を採用した年です。通常は DateTime.MinValue を確認するだけで十分ですが、データが 18 世紀よりも前の年である可能性があると思われる場合は、別の確認を行うか、別のデータ型を使用する必要があります。(博物館がデータベースで何を使用しているのかよく疑問に思います)

最大日付の確認は実際には必要ありません。SQL Server と .NET DateTime の両方の最大日付は 12/31/9999 です。これは有効なビジネス ルールである可能性がありますが、問題は発生しません。

于 2010-02-03T14:13:23.310 に答える
1

エンティティでこれを行うための私の探求で、私はここにつまずき、私が見つけたものを投稿するために戻ってきました...

EF4 を使用する場合、BitConverter を使用して .NET の DateTime から「SQL の」datetime 列を埋めることができます。

EntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary());

また、Fakrudeen のリンクは私をさらに発展させました... ありがとう。

于 2011-06-01T21:18:47.520 に答える
1

また、解像度 [時間の量] が異なることに注意してください。

http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx

SQL 1 は 3.33 ミリ秒で、.net 1 は 100 ns です。

于 2010-02-05T11:01:57.120 に答える
0
var sqlCommand = new SqlCommand("SELECT * FROM mytable WHERE start_time >= @StartTime");
sqlCommand.Parameters.Add("@StartTime", SqlDbType.DateTime);
sqlCommand.Parameters("@StartTime").Value = MyDateObj;
于 2020-05-26T23:22:20.523 に答える