2009-12-15 43 views
1

我插入從類型化數據集的數據到我的MSSQL數據庫使用SqlBuldCopy類:獲取SqlBulkCopy.WriteToServer SQLDATETIME溢()

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 PM之間。 有沒有辦法在foreach中說這樣的話:如果數據集中的DateTime字段值是DateTime.MinValue,那麼不要將數據集中的DateTime字段插入到我的數據庫中?

問候

回答

1

我想你需要確保沒有DateTime.MinValue的DataTable中 - 你控制該表的人口?

如果是這樣,而不是將DateTime.MinValue存儲在DateTime字段中,請改爲使用SqlDateTime.MinValue。或者,如果要將NULL存儲到數據庫中,請將DBNull存儲在數據表中。

+0

謝謝你的回答。我不控制數據表的人口。我從Web服務獲取數據庫。我怎麼才能檢查bulkCopy.WriteToServer(dt);如果DateTime字段不是DateTime.MinValue?如果在數據庫中真正存儲DBNull。 – 2009-12-15 09:28:27

+0

您可以遍歷每一行,並更改所有具有DateTime.MinValue的日期時間字段 – AdaTheDev 2009-12-15 09:38:45

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 2015-07-14 05:29:18

相關問題