Linq插入可以为空的datetime列

时间:2013-02-20 12:13:24

标签: c# asp.net linq

我正在尝试使用Linq进行插入并继续获取sqlDateTime溢出错误。

我在DB中有一个可以为空的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错误,因为我正在将异常写入屏幕进行测试。

3 个答案:

答案 0 :(得分: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日是有效日期并将进行解析但数据库引擎可能无法接受,因此请检查数据库中可能的最低日期值,并进一步考虑此类差异。

答案 1 :(得分: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可以为空。

让我们考虑一下您的代码情况。您声明new DateTime(),给定值为1/1/0001 12:00:00 AM,MS SQL SERVER could not accept that

尝试这种方式:

        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;

答案 2 :(得分:1)

new DateTime();不为空,为DateTime.MinValue(0001年1月1日)。这是sql datetime min值之前的日期(1753年1月1日)。

使用null或使用sql类型datetime2