1

我正在尝试使用 Linq 进行插入并不断收到 sqlDateTime 溢出错误。

我在数据库中有一个可为空的 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 datepicker,我正在检查它是否是 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是可以为空的。

让我们考虑一下有关您的代码的这种情况。您正在声明 anew 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;
        }

提示:开发程序最简单的方法是,数据库中表的字段必须nullable不包括Primary Key. 如果您不想接受null您的数据库,只需让您的程序进行管理。

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

new DateTime();不为空,它是DateTime.MinValue(0001 年 1 月 1 日)。这是 sqldatetime最小值(1753 年 1 月 1 日)之前的日期。

要么使用null要么使用sql类型datetime2

于 2013-02-20T12:17:21.410 回答