У меня есть код С#, который копирует строки из одной базы данных и вставляет их в другую. Это делается с помощью DataTable
и SqlBulkCopy
.
При импорте в мое приложение C# столбцы меток времени имеют тип данных System.DateTime
внутри DataTable
, который вставляется в SQL Server. После выполнения SqlBulkCopy.WriteToServer()
значения меток времени внутри целевых таблиц имеют тип datetimeoffset(6)
и к ним добавляется смещение часового пояса (... +01:00).
Как мне остановить это? Так было не всегда, только недавно стало происходить.
ОБНОВЛЕНИЕ:
Ожидаемый часовой пояс - UTC, всегда для моих целей. Однако я вынужден хранить это в столбце datetimeoffset по деловым причинам. Так что я ожидаю +00:00
DataTable data = importer.GetDataTable();
using (SqlBulkCopy copy = new SqlBulkCopy(conn)){
copy.WriteToServer(data);
}
datetimeoffset
всегда имеет часовой пояс, поэтому, если вы спрашиваете, как его удалить, ответ будет просто нет. Если вам не нужен часовой пояс, не используйтеdatetimeoffset
. - person Larnu   schedule 20.04.2020INSERT
данных в экземпляр SQL. - person Larnu   schedule 20.04.2020SqlBulkCopy
преобразуетDateTime
, и некоторых настроек, которые вы можете изменить. - person Scott Hannen   schedule 20.04.2020DateTimeOffset
имеет часовой пояс, а в том, почемуDateTime
преобразуется вDateTimeOffset
. - person Scott Hannen   schedule 20.04.2020DateTimeOffset
всегда имеет смещение. У него нет часового пояса. Это разные вещи. Два разных места могут временно использовать одно и то же смещение, но по-прежнему находиться в разных часовых поясах. - person Jon Skeet   schedule 20.04.2020DataTable
(в памяти), чтобы преобразовать все значенияDateTime
в значенияDateTimeOffset
? - person Jon Skeet   schedule 20.04.2020SqlBulkCopy
, потому что вам потенциально придется бороться с двумя уровнями преобразования: один раз в C# при преобразовании типа ввода в тип .NET, соответствующий типу T-SQL. , а затем еще один в SQL Server, когда он преобразует тип .NET в тип T-SQL. Оба из них имеют некоторые неприятные угловые случаи. Чтобы избежать неожиданностей, всегда используйте входную таблицу (илиIDataRecord
коллекцию) с типами столбцов, точно соответствующими месту назначения, и сами позаботьтесь о преобразованиях. - person Jeroen Mostert   schedule 20.04.2020