Как вставить DataTable, содержащий нулевые значения, в Sql Server Table? - PullRequest
1 голос
/ 18 июня 2011

У меня есть DataTable, который также содержит некоторые нулевые значения, такие как

   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. Так что вставка не происходит.

Ответы [ 4 ]

2 голосов
/ 18 июня 2011

Обычно вы вставляете из DataTable через адаптер (например, System.Data.SqlClient.SqlDataAdapter). Это будет обрабатывать пустые значения и т. Д. Вы также можете использовать SqlBulkCopy, если оно очень большое (хотя в этом случае вам нужно быть осторожным с журналами транзакций и т. Д., Поскольку массовая вставка может быть не полностью зарегистрирована, IIRC).

предостережение: лично я бы использовал DataTable здесь в любом случае - я бы использовал обычные типизированные классы.

1 голос
/ 18 июня 2011

Я думаю, вы можете заменить NULL их значением по умолчанию для ex.в поле companyId NULL заменить на -1 или 0, а в SQL Server вы снова можете заменить -1 или o на NULL.

Через замену идентификатора будет частью XML. Я знаю, что это не очень хорошее решение.

1 голос
/ 18 июня 2011

Думаю, будет проще, если вы будете следовать методу, описанному в следующей статье:

Использование DataTable для обновления таблицы в базе данных

1 голос
/ 18 июня 2011

Если вы хотите получить DataTable в другую таблицу, используйте класс SqlBulkCopy.Убедитесь, что для ваших значений, которые имеют значение NULL, задано значение DBNull.Value, а не для «NULL», и используйте SqlBulkCopy, чтобы задать имя целевой таблицы


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...