この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 22966|答える: 1

[出典] spring.net nhibernate sqldatetime overflow solution

[リンクをコピー]
掲載地 2017/09/13 14:34:58 | | | |
SqlDateTimeオーバーフロー。 1753年1月1日午前0時から12月31日午後11時59分59秒の間に必要です




ウェブサイトから更新操作を行う際にエラーが何度も出て、XMLの設定かSQL文の実行時に何か問題が起きたのかと思いました

SQLクエリアナライザーを使って生成されたSQL文を取得しようとしたところ、正しい実行に何が問題なのか分かりました。 SQL文は以下の通りです:

執行sp_executesql DBOに挿入。 LeanLogs(バージョン、OrganizationId、CustomInfoId、LastLeanAlarmType、nowLeanAlarmType、InsertTime、TreatedTime) 値(@p0、@p1、@p2、@p3、@p4、@p5、@p6); 選択 SCOPE_IDENTITY()',N'@p0 int,@p1 int,@p2 int,@p3 int,@p4 int,@p5 DateTime,@p6 DateTime',@p0=1,@p1=35,@p2=12,@p3=10,@p4=10,@p5='2017-09-13 13:09:41',@p6=NULL
SqlDateTimeオーバーフロー。 解決は1753年1月1日午前0時0分00秒から12月31日11時59分59秒の間に必ず---されなければなりません

エラーの原因

    データベースに渡される時間タイプの値がNULLの場合、またはDateTime.MinValueの挿入や更新時に、datetimeフィールドの値はデフォルトでnullとなります。
    ここでのNULLはプログラムコード内のnullを指し、多くの場合、時間型変数がプログラム内で定義され、値を割り当てずにデータベース(またはストアドプロシージャ)に渡される場合です。 この時点で、この変数の値はデフォルトで01/01/01に割り当てられています。
     データベースのDateTimeタイプフィールドの最小値は1/1/1/1753 12:00:00であり、 NET FrameworkのDateTime型では、最小値は1/1/0001 0:00:00です。これはSQL値の最小値範囲外であり、データオーバーフローエラーを引き起こします。
    では、C#で.netとsqlの最大最小時間を確認する方法を見てみましょう。


出力効果:



結局、10分以上もいじった。

最終的な誤差原因は以下の通りです。

オブジェクトの属性タイプの一つもオブジェクトであり、テーブルに外部キーがあり、新しいdatetime属性が外部キーテーブルに追加されますが、この属性は値が割り当てられず、nullable型にも設定されていません

オブジェクトを追加または更新する際、.netのデフォルト値の時刻がデータベースのデフォルト最小時間より短いため、外部キーオブジェクトのdatetimeが自動的にデフォルト値に付加されます

解決策:外来キーオブジェクトのdatetime型のプロパティをnullable typeに設定し、同僚が完璧に解決できるよう助けましょう!







先の:.net/c# 操作 REDISキャッシュの追加、削除、修正およびクエリ [ソースコード]
次に:asp.net ウェブサイト異常エラー分析
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com