【问题标题】:How to Insert a DataTable containing Null values in to Sql Server Table?如何将包含 Null 值的 DataTable 插入到 Sql Server 表中?
【发布时间】:2011-09-17 15:49:38
【问题描述】:

我有一个 DataTable,其中还包含一些 Null 值,例如

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

我想将此 DataTable 插入到表中。 在 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 的标签。所以插入不会发生。

【问题讨论】:

  • 抛出的错误说明了什么?
  • @Akram:我编辑了我的问题。请看一下。

标签: c# asp.net sql-server sql-server-2005 datatable


【解决方案1】:

通常您会通过适配器(例如System.Data.SqlClient.SqlDataAdapter)从DataTable 插入。这将处理空值等。如果它非常大,您也可以使用SqlBulkCopy(尽管在这种情况下您需要小心事务日志等,因为批量插入可能不会被完全记录,IIRC)。

警告:就个人而言,我会在这里使用DataTable无论如何 - 我会使用常规类型的类。

【讨论】:

    【解决方案2】:

    如果要将 DataTable 放入另一个表,请使用 SqlBulkCopy 类。确保您的 null 值设置为 DBNull.Value 而不是“null”,并使用 SqlBulkCopy 设置目标表名称

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

    【讨论】:

      【解决方案3】:

      我认为如果你按照下面文章中描述的方法会更容易:

      Use DataTable to update table in Database

      【讨论】:

        【解决方案4】:

        我认为您可以将 NULL 替换为 ex 的默认值。在 companyId 字段 NULL 中替换为 -1 或 0,在 SQL Server 中,您可以再次将 -1 或 o 替换为 NULL

        通过替换 ID 将成为 XML 的一部分。 我知道这不是好的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-29
          • 2014-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多