SqlBulkCopy и столбец целевой базы данных datetime2 - PullRequest
0 голосов
/ 17 июня 2019

Если вы посмотрите на эту статью Microsoft Documentation:

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlbulkcopy?redirectedfrom=MSDN&view=netframework-4.5.2

в разделе «Замечания», там будет написано:

SqlBulkCopy завершится неудачно при массовой загрузкеСтолбец DataTable типа SqlDateTime в столбец SQL Server, тип которого является одним из типов даты / времени, добавленных в SQL Server 2008.

Я не наблюдаю это поведение (сбой) и хотел бы знать,эта документация, возможно, устарела, и SqlBulkCopy был обновлен для поддержки этих типов данных.

Подробнее о том, что я делаю:

  • Я создаю DataTable как источник для SqlBulkCopy.Столбец DataTable имеет тип System.DateTime .
  • Целевой столбец в таблице базы данных имеет тип datetime2 .
  • Я использую .Net 4.5 и SQL Server 2016 SP1

Все просто работает,Я не получаю никаких сбоев.Я даже пытался передать дату «01/01/0001» (вне диапазона для типа SQL datetime ) в DataTable, и она сохраняется как таковая в базе данных.

Я нашел это8 лет SO сообщение: Как я могу установить тип столбца при использовании SqlBulkCopy для вставки в столбец sql_variant , но я не использую sql_variant и в моем случае ничего не происходит.

Кто-нибудь может уточнить, что означает приведенная мной документация Microsoft?

1 Ответ

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

Ошибка SqlBulkCopy при массовой загрузке столбца DataTable типа SqlDateTime в столбец SQL Server, тип которого является одним из типов даты / времени, добавленных в SQL Server 2008.

Но вы написали тип вашей колонки System.DateTime - поэтому это замечание не относится к вашему коду.

Другими словами, если вы создали свою таблицу данных следующим образом:

var dt = new DataTable();
dt.Columns.Add("date column", typeof(SqlDateTime));
// ... other columns here

Тогда это будет иметь отношение к вашему коду.

...