15

最近、やろうとしているときにかなり奇妙なエラーが発生しましたdb.SubmitChanges():

SqlDateTime オーバーフロー。1753 年 1 月 1 日 12:00:00 AM から 9999 年 12 月 31 日 11:59:59 PM の間である必要があります。

ポイントは、私DateTime.Nowは自分のオブジェクトにプロパティを設定するためだけに使用し、呼び出した後は本来あるべきResponse.Write(DateTime.Now.ToString());姿で表示されるということです。17-04-2013 18:03:13

以前は発生していませんでしたが、今では関数が常に壊れています。私はまったく無知です-SQLサーバーの日付は問題ないようです。

何が原因でしょうか?

編集

私はそれが助けになるとは思わない(単純すぎてエラーIMOが発生しない)が、私の機能がある:

public bool ReportLogIn(int UserID, string IP, int Succeed ... ) {
    A_UserLoginHistory Report = new A_UserLoginHistory();

    Report.IP = IP;
    Report.UserID = UserID;
    Report.Status = Succeed;
    Report.Date = DateTime.Now; //the only DateTime field
    ...

    try {
        db.A_UserLoginRegistry.InsertOnSubmit(Report);
        db.SubmitChanges();
        return true;
    } catch (Exception e) {
        ErrorLog.AddError(e.ToString());
        return false;
    }
}
4

2 に答える 2

1

最も可能性が高いのは、日付フィールドを初期化するのを忘れていることです。それらをすべて設定し、新しいものを追加していませんか? 01/01/0001 00:00:00 を挿入しようとするため、DBML に新しい日付フィールドを追加すると、通常、これが発生します。

それでも解決しない場合は、DB.SubmitChanges を実行する前に DB.Log に New StringWriter を設定し、その後 DB.Log.ToString を調べます (デバッガーで実行できます)。これにより、クエリとすべてのパラメーター (下部) が表示されるので、どのパラメーターが問題を引き起こしているかを確認できます。

この種の問題に役立つもう 1 つのことは、DB.GetChangeSet() を使用して、SubmitChanges 呼び出しの前にどのレコードが挿入/更新されているかを確認することです (削除がこれを引き起こす可能性があるとは想像できません)。

于 2013-04-17T20:00:54.063 に答える