2010-04-18 4 views
2

Insert 문에서 형식화 된 데이터 집합을 사용하고 있습니다. NULL 값을 허용하도록 정의 된 smalldatetime 필드가있는 테이블이 있습니다. .NET 2.0 FormView에서 삽입 할 때 "SqlDateTime 오버플로가 발생합니다. 1/1/1753 12:00:00 AM과 12/31/9999 11:59:59 PM 사이 여야합니다."형식화 된 데이터 집합에서 SqlDateTime 오버플로가 발생했습니다. 삽입

지금, 나는 this post을 읽었습니다, 그것이 null 허용 OBJ를 받아 들여야처럼

global::System.Nullable<global::System.DateTime> DoB 

그래서, 그것은 보이는 클래스 생성자에 전송으로 매개 변수가 정의된다. 또한 생성 된 코드는 전송 된 값을 테스트합니다.

 try { 
      returnValue = command.ExecuteScalar(); 
     } 

그래서, 내 질문은 생각 : 나는 형식화 된 데이터 집합 빈을 설정하는 데 사용할 어떻게 생성 SqlClient.SqlCommand.ExecuteScalar()가 실행될 때 특히

 if ((DoB.HasValue == true)) { 
      command.Parameters[6].Value = ((System.DateTime)(DoB.Value)); 
     } 
     else { 
      command.Parameters[6].Value = global::System.DBNull.Value; 
     } 

는 오류가 발생 값 (FormName에서 CommandName = 삽입)을 데이터베이스의 null로 전달합니까?

+0

추가 추가 조사 : 문제의 일부는 여기에서 디버깅 할 수 없습니다. 해결 방법으로 객체를 복사하고 내 객체를 만들었습니다. 형식화 된 데이터 집합은 테이블 어댑터에 대한 부분 클래스를 만들기 때문에이 테이블을 탭하여 Insert 개체의 복제본을 추가했습니다. 이를 통해 중단 점을 설정하고 값이 무엇인지 확인할 수있었습니다. 파트 II : FormViewInsertEventArgs를 보면 날짜가 null로 전송됩니다. 그러나 Insert 메소드와 비교하면 {1/1/0001 12:00:00 AM}으로 바뀌 었습니다 ... 더 많은 작업이 필요합니다 ... –

+0

좋아, 버그가있을 것입니다. MS가 반사 루틴을 구현 한 방식. 내 메소드의 매개 변수 유형을 string으로 변경하면, 공백으로 처리됩니다. Nullable을 평가하는 경우 nix = ""; 나는 * null *을 얻는다. 메서드를 호출하는 매개 변수 목록을 만들기 때문에 ObjectDataSourceMethod GetResolvedMethodData() 호출에 잘못된 것이 있어야합니다. 어딘가에, 나는 새로운 Nullable이 아닌 새로운 DateTime()을 수행하고 있다고 생각한다. (). 나는 그것을 찾을 시간이 없다. –

답변

1

좋아, 그래서 나를 위해 일한거야. 먼저, 필자는 ADO 개체를 생성하는 DataAdapters가있는 Typed DataSet을 가지고 있습니다. 따라서 내 페이지에서 어댑터를 가리키는 유형의 ObjectDataSource를 만든 다음 그 안에있는 다른 액세스 메소드의 이름을 지정할 수 있습니다.

아니요, 기본적으로 모든 열을 Null 허용 테이블에 삽입합니다. 어떤 varchar, 약간 smalldatetime.

빈 양식을 제출하면 null을 입력하고 싶습니다. 그것들은 아니며 다양한 오류가 많이 발생합니다. 내가 한 일은 Inserting 이벤트에 액세스하기 위해 ObjectDataSource를 서브 클래 싱하는 것입니다. (재사용을 위해 서브 클래 싱 된) Inserting 이벤트에서 InputParameters를 반복하고 문자열이고 == ""인 경우 null로 설정했습니다. 또한 ConvertNullToDBNull을 true로 설정할 수 없습니다. 문자열이 실패하게됩니다. 이로 인해 Nullable은 null로 유지됩니다.

관련 문제