2011-06-18 64 views
1

我有一個DataTable,其中還包含了一些空值,如如何將包含Null值的DataTable插入到Sql Server表中?

ID    CustomerID   CompanyID 
-------  --------------  -------------- 
    1     2     Null 
    2     Null    1 
    3     5     4 

我想這個數據表中插入表。 在SQL Server 2005中,我有一個名爲「JobDetails」的表,其中有三個列「JobOrderID」,「CustomerID」和「CompanyID」。所以上面的DataTable被插入到「JobDetails」表中,如下所示:

JobOrderID  CustomerID   CompanyID 
    ------------ ------------  ------------ 
     1    2    Null 
     2    Null    1 
     3    5     4 

如何實現這一目標?我試圖將DataTable作爲XML傳遞。但是由於NUll值的存在,它會拋出錯誤而無法插入。

錯誤意味着,XML標記不考慮NULL值,所以需要爲

<NewDataSet> 
     <JobDetails> 
      <JobOrderID>1</JobOrderID> 
      <CustomerID>2</CustomerID> 
     </JobDetails> 
     <JobDetails> 
      <JobOrderID>2</JobOrderID> 
      <CompanyID>1</CompanyID> 
     </JobDetails> 
     <JobDetails> 
      <JobOrderID>3</JobOrderID> 
      <CustomerID>5</CustomerID> 
      <CompanyID>4</CompanyID> 
     </JobDetails> 
    </NewDataSet> 

它忽視它包含NULL的標籤。所以插入不會發生。

+0

拋出的錯誤是什麼意思? –

+0

@Akram:我編輯了我的問題。請看看它。 – thevan

回答

2

通常你會從DataTable通過適配器插入(如System.Data.SqlClient.SqlDataAdapter)。這將處理空值等。如果它非常大(也可以使用SqlBulkCopy(儘管在這種情況下需要小心事務日誌等,因爲批量插入可能未完全記錄,IIRC)。

需要注意的是:我個人會在這裏使用DataTable - 我會使用普通類型的類。

1

如果要將DataTable獲取到另一個表中,請使用SqlBulkCopy類。確保你的價值觀是空被設置爲DBNull.Value,而不是「空」,並使用SqlBulkCopy的設置目標表名

 

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) 
{ 
    bulkCopy.DestinationTableName = destinationTableName; 
    bulkCopy.WriteToServer(yourDataTable); 
} 
 
1

我認爲你可以爲前的默認值替換NULL。在companyId字段NULL替換爲-1或0,並且在SQL Server中,您可以再次將-1或o替換爲NULL

通過替換ID將成爲XML的一部分。 我知道這不是很好的解決方案。

相關問題