1

Linq を使用して挿入しようとしていますが、sqlDateTime オーバーフロー エラーが引き続き発生します。

DB に null 許容の DateTime フィールドがあります。

私はlinq to sqlを使用しており、dateTimeのクラスは次のとおりです。

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_concern_DateTo", DbType="DateTime")]
public System.Nullable<System.DateTime> concern_DateTo {
    get { return this._concern_DateTo; }
    set {
        if ((this._concern_DateTo != value)) {
            this.Onconcern_DateToChanging(value);
            this.SendPropertyChanging();
            this._concern_DateTo = value;
            this.SendPropertyChanged("concern_DateTo");
            this.Onconcern_DateToChanged();
        }
    }
}

日付を選択する JQuery 日付ピッカーがあり、dateTime であることを確認しています。

DateTime PartC_DateTo = new DateTime();

//'Date To' Part C
//================
if (txt_PartC_DateTo.Text != string.Empty) {
    DateTime.TryParse(txt_PartC_DateTo.Text, out PartC_DateTo);
}

私が割り当てているとき、私はこのコードを使用しています:

if (txt_PartC_DateTo.Text != string.Empty) {
    concern.concern_DateTo = PartC_DateTo;
}

次に、submitChanges()テストのために画面に例外を書き込んでいるときに、SQLDateTime エラーが表示されます。

4

3 に答える 3

3

DateTime.TryParse(戻り値によって)成功した​​かどうかを確認しないため、データベースにとってはPartC_DateTo無効(デフォルト)である可能性がDateTimeあります。

代わりに、DateTime値をnull、および...

DateTime parseableDate;
DateTime? someNullableDate;
if (DateTime.TryParse(txt_PartC_DateTo.Text, out parseableDate)) {
   someNullableDate = parseableDate;
}

ここで someNullableDate を使用して、A) 有効な日付、または B) null のいずれかであると想定できます。ただし、0001 年 1 月 1 日は有効な日付であり、解析されますが、データベース エンジンによって受け入れられない可能性があることに注意してください。そのため、データベース内の可能な限り低い日付値を確認し、そのような不一致にさらに対応してください。

于 2013-02-20T12:16:18.860 に答える
2

を宣言しようとする必要がありますDateTime?

        DateTime? PartC_DateTo = null;
        DateTime dateOut = new DateTime();
        if (txt_PartC_DateTo.Text != string.Empty)
        {
            DateTime.TryParse(txt_PartC_DateTo.Text, out dateOut);
            PartC_DateTo = dateOut;
        }

この回答はnull、あなたconcern_DateToがnull可能であるため、受け入れることを意図しています。

コードに関するこのシナリオを考えてみましょう。を宣言してnew DateTime()おり、指定された値は1/1/0001 12:00:00 AMであり、MS SQL SERVERはそれを受け入れることができませんでした

この方法を試してください:

        DateTime? PartA_Date;
        DateTime dateOut2;
        if (!DateTime.TryParse(txt_PartA_Date.Text, out dateOut2))
        {
            lbl_message.Text += " * 'Date' is not a valid date!<br/>"; txt_PartA_Date.BackColor =
                Color.FromName(ConfigurationManager.AppSettings["ErrorColour"]);
        }
        else
        {
            PartA_Date = dateOut2;
        }

ヒント: プログラムを開発する最も簡単な方法は、データベースのテーブルのフィールドnullablePrimary Key. データベースへのアクセスを受け入れたくない場合はnull、プログラムをそのままにしておいてください。

 if (IsNull) return;
于 2013-02-20T12:52:30.637 に答える
1

new DateTime();null ではなく、DateTime.MinValue(0001 年 1 月 1 日) です。これは、sql datetimemin 値 (1753 年 1 月 1 日) より前の日付です。

nullSQLタイプを使用するか使用しますdatetime2

于 2013-02-20T12:17:21.410 に答える