2011-06-18 74 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的一部分。 我知道这不是很好的解决方案。

相关问题