3

SQLデータベースとのインターフェイスにC#を使用しています。データベースにはDateTimeフィールドがあります。C#からDateTimeオブジェクトを書き込もうとすると、次のエラーが発生します。

エラー[22008][Microsoft][ODBCSQLServerドライバー]日時フィールドがオーバーフローしました

私はこれをトピックで見つけました:

http://social.msdn.microsoft.com/forums/en-US/sqldataaccess/thread/ac1b5a6d-5e64-4603-9c92-b75ba4e51bf2/

C#側のDateTimeオブジェクトに対して実行できる操作はありますか?

編集 私はDateTime.MinValueを追加しようとしています

4

4 に答える 4

5

あなたは悪い日付を過ぎているように聞こえます。たとえば、DateTime.MinValueは、SQLServerの日時値の許容範囲から約1600年外れています。

ちなみに、C#からSQLServerへの通信にはODBCを使用しないでください。System.Data.SqlClientを使用すると、パフォーマンスが大幅に向上します。

于 2010-07-26T20:22:41.157 に答える
4

.NET DateTimeオブジェクトには、SQLの日付/時刻フィールドよりも広い範囲があります。

データアクセス層では、データベースに日付を書き込むときはいつでも、それがSqlDateTime.MinValueおよびSqlDateTime.MaxValueのレート内にあることを確認してください。

于 2010-07-26T20:26:59.243 に答える
2

確かに、.NET DateTimeは初期化されていません。つまり、「0000-01-01」であり、これはSQL Server DATETIMEの有効な値ではなく、多くの場合、目的の値ではありません;-)

于 2010-07-26T20:25:26.000 に答える
1

すべての日時列をdatetime2タイプに変更します。以下のクエリを使用してSQLスクリプトを生成します。

select distinct concat('alter table ', table_name, ' alter column ',  column_name, ' datetime2 ', 
case when(is_nullable = 'NO') then ' NOT ' else '' end, ' NULL;') 
from information_schema.columns where data_type = 'datetime';
于 2019-04-05T05:54:40.190 に答える