我正在尝试使用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错误,因为我正在将异常写入屏幕进行测试。
答案 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