2013-02-20 3 views
1

Я пытаюсь сделать вставку с Linq и продолжать получать ошибку переполнения sqlDateTime.Вставка Linq с нулевым столбцом datetime

У меня есть поле DateTime с нулевым значением в БД.

Я использую LINQ к 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(); 
     } 
    } 
} 

У меня есть DatePicker 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

На этот вопрос можно легко ответить, пройдя через код. Установите точку останова на 'wor.concern_DateTo = PartC_DateTo;' и посмотрите, к чему вы ее устанавливаете. –

+0

Как его установить? новый DateTime («yymmdd») примерно так – StudentRik

ответ

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 обнуляемым.

Давайте рассмотрим этот сценарий о ваших кодах. Вы объявляете , и данное значение равно 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; 
+0

Аргумент out не соответствует типу параметра. Это красный squiggly – StudentRik

+0

мой ответ обновлен. – spajce

+0

Все еще делает то же самое. У меня есть другие даты, но они не являются нулевыми. Я использую их одинаково. это неправильно? – StudentRik

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) нуль; однако обратите внимание, что 1 января 0001 года является допустимой датой и будет анализироваться, но не может быть принята вашим механизмом базы данных, поэтому проверьте свою минимально возможную дату в вашей базе данных и, кроме того, учитывайте такие расхождения.

+0

Что вы предложите – StudentRik

+0

@StudentRik Я обновил решение, хотя я беспокоюсь, что с нашими одними словами работать нельзя. –

+0

У меня есть другие поля даты, и я делаю то же самое для них, это неправильно. Тей не могут быть недействительными. Когда я просматриваю свою программу и проверяю значения, они все хорошие даты, преобразованные в DateTime – StudentRik

1

new DateTime(); не является нулевым, это DateTime.MinValue (1 января 0001 года). Это дата перед значением sql datetime min (1 января 1753 года).

Либо использовать null или использовать этот тип данных datetime2

Смежные вопросы