2013-02-20 2 views
1

내가 Linq에와 삽입을하고 sqlDateTime 오버플로 오류가 계속하려고에 삽입합니다. Linq에는 널 (NULL) 날짜 열

본인은 DB에 입력 가능 날짜 시간 필드가 있습니다.

나는 SQL에 LINQ를 사용하고 및 날짜 시간 내 클래스입니다 :

[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(); 
     } 
    } 
} 

I 가지고 있고 그것이 날짜 시간임을 확인하고 날짜를 선택하는 JQuery와 날짜 선택기 :

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; 
} 

을, 테스트를 위해 화면에 예외를 쓰고 있으므로 SQLDateTime 오류가 나타납니다.

+0

이 질문은 쉽게 답변드립니다. 'concern.concern_DateTo = PartC_DateTo; '에 중단 점을 설정하고 설정 대상을 확인하십시오. –

+0

어떻게 설정해야합니까? new DateTime ("yymmdd") something like that – StudentRik

답변

2

를 사용하는 것은 concern_DateTo이 Null을 허용하여 이후 null을 수용하기위한 것입니다.

은 당신의 코드에 대한이 시나리오를 고려할 수 있습니다. 당신은 new DateTime()를 선언하고 주어진 값은 1/1/0001 12:00:00 AM이며, MS SQL 서버에 could not accept that. 당신의 데이터베이스에서 테이블의 필드가 Primary Key 포함하지 nullable해야하는 프로그램을 개발하는 가장 쉬운 방법 :

 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; 
     } 

힌트 :

이 방법을 사용해보십시오. 데이터베이스에 null을 허용하지 않으려면 관리 할 프로그램을 그대로 두십시오.

if (IsNull) return; 
+0

out 인수가 매개 변수 유형과 일치하지 않습니다. 그 빨간 물결이 – StudentRik

+0

내 대답이 업데이 트됩니다. – spajce

+0

여전히 동일합니다. 다른 datetimes가 있지만 그들은 nullable 없습니다. 나는 같은 방식으로 그들을 사용하고 있습니다. 이게 잘못된거야? – StudentRik

3

DateTime.TryParse이 성공했는지 (반환 값을 통해) 확인하지 않으므로 PartC_DateTo은 데이터베이스에 대해 여전히 유효하지 않은 (기본값) DateTime 일 수 있습니다.

대신

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

당신은 여기 someNullableDate를 사용하고 A) 유효한 날짜, 또는 B) 널 (null) 중 하나라고 가정 할 수 있습니다 ... nullDateTime 값을 유지하고; 그러나 0001 년 1 월 1 일이 유효한 날짜이며 데이터베이스 엔진에서 구문 분석하지만 받아 들여지지 않을 수 있으므로 데이터베이스에서 가능한 가장 낮은 날짜 값을 확인하고 이러한 불일치를 더 수용하십시오.

+0

당신은 무엇을 제안하겠습니까 – StudentRik

+0

@StudentRik 나는 해결책을 가지고 업데이트했습니다, 그러나 나는 우리의 말로만 작업 할 수 없다고 걱정합니다. –

+0

다른 날짜 필드가 있고 그 필드에 대해 동일한 작업을하고 있습니다. 올바르지 않습니다. 테이는 null 허용되지 않습니다. 프로그램을 단계별로 실행하고 값을 확인하면 날짜가 모두 올바른 날짜로 변환됩니다. – StudentRik

1

new DateTime();DateTime.MinValue입니다 (0001 년 1 월 1 일) 널 (null)이 아닙니다. 이것은 SQL datetime 최소값 (1753 년 1 월 1 일) 이전의 날짜입니다.

중 하나는 당신은 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를 사용하거나 SQL 형에게 datetime2