2009-12-15 3 views
1

내 MSSQL 데이터베이스에 입력 된 데이터 세트에서 데이터를 삽입() SqlBulkCopy.WriteToServer에서 SqlDateTime 오버 플로우를 가져 오기 : 그것은 위대한 작품을SqlBuldCopy 클래스를 사용하여

foreach (DataTable dt in ds.Tables) 
{ 
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) 
    { 
     bulkCopy.DestinationTableName = "dbo." + dt.TableName + "_neu"; 

     try 
     { 
      bulkCopy.WriteToServer(dt); 
     } 
     catch (Exception ex) 
     { 
      throw new FaultException("\n" + dt.TableName + ": " + ex.Message); 
     } 
    } 
} 

. 그러나 내 데이터베이스에 DataTime.MinValue 삽입 할 때이 오류가 발생합니다 : SqlDateTime 오버플로. 1/1/1753 12:00:00 AM과 12/31/9999 오후 11:59:59 사이 여야합니다. foreach에서 이런 식으로 말할 수있는 방법이 있습니까? 데이터 집합의 DateTime 필드 값이 DateTime.MinValue 인 경우 데이터 집합의 DateTime 필드를 데이터베이스에 삽입하지 마십시오.

안부

답변

1

난 당신이 데이터 테이블에는 DateTime.MinValue의가 없는지 확인해야 할 거라고 생각 - 당신이 그 테이블의 인구를 제어하는가?

그렇다면 DateTime 필드에 DateTime.MinValue를 저장하는 대신 SqlDateTime.MinValue을 대신 사용하십시오. 또는 NULL을 DB에 저장하려면 DBNull을 대신 datatable에 저장하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 데이터 테이블의 인구를 제어하지 않는다. 데이터베이스를 웹 서비스에서 가져옵니다. bulkCopy.WriteToServer (dt) 전에 어떻게 확인할 수 있습니까? DateTime 필드가 DateTime.MinValue가 아닌 경우? 참이면 DBNull을 데이터베이스에 저장하십시오. –

+0

각 행을 반올림하고 DateTime.MinValue가있는 모든 DateTime 필드를 변경할 수 있습니다. – AdaTheDev

0

SQL Server 2008이 있고 MinValue 저장에 신경 쓰지 않는다면 DateTime2을 사용하여이 값을 얻을 수 있습니다.

0
public void ChangeDateTimeColumn(DataTable newDataTable) 
{ 
    for (int i = 0; i < newDataTable.Rows.Count; i++) 
    { 
     for (int j = 0; j < newDataTable.Columns.Count; j++) 
     { 
      DataColumn dc = newDataTable.Columns[j]; 
      if (dc.DataType == typeof(DateTime)) 
      { 
       string name = dc.ColumnName; 
       DataRow row = newDataTable.Rows[i]; 
       if (row[name] != null && row[name].ToString().Trim() != "") 
       { 
        DateTime value = (DateTime)row[name]; 
        if (value < (DateTime)SqlDateTime.MinValue) 
        { 
         row[name] = (DateTime)SqlDateTime.MinValue; 
        } 
        else if ((DateTime)SqlDateTime.MaxValue < value) 
        { 
         row[name] = (DateTime)SqlDateTime.MaxValue; 
        } 
       } 
      } 
     } 
    } 
} 
+0

문제를 해결하기 위해 수정 한 부분도 텍스트를 추가하십시오. – Garry

관련 문제