SQLBulkCopy не может преобразовать время в дату и время - PullRequest
2 голосов
/ 26 июля 2010

Я пишу небольшую утилиту для копирования базы данных из собственной базы данных ODBC в базу данных SQL Server. Все работает отлично, кроме случаев, когда я использую SQLBulkCopy для копирования данных. Он работает в большинстве случаев, но не при попытке скопировать поле TIME в SQL DATETIME. Я получаю эту ошибку:

Заданное значение типа TimeSpan из источника данных нельзя преобразовать в тип datetime указанного целевого столбца.

Когда я создаю схему в SQL Server, мне нужно сделать поля DATE и TIME типа DATETIME в SQL Server, так что нет никакого способа обойти это. Я хотел использовать SQLBulkCopy, поэтому мне не нужно было вручную читать каждую запись в каждой таблице и оборачивать логику вокруг особых случаев. Прежде чем я пойду по этому пути, есть ли другой способ сделать это? У меня нет никакого контроля над схемой или содержимым исходной базы данных.

1 Ответ

1 голос
/ 26 июля 2010

Я предполагаю, что вы имеете дело с до SQL Server 2008. SQL Server 2008 имеет типы данных DATE и TIME.

Я думаю, что вам придется использовать DataTable, который соответствует схеме SQL Server, и загружать еговаш читатель источника, соответствующим образом изменив ВРЕМЯ на DATETIME, добавив информацию о дате (например, 01.01.1900).Затем используйте WriteToServer (DataTable).Возможно, вы захотите сделать это в пакетном режиме, поскольку вы можете использовать кучу памяти, считывая все это в DataTable.

По какой-то конкретной причине вы не можете использовать SSIS?

...