У меня проблема с преобразованием строки в дату с использованием SQL Bulkcopy в asp.net 3.5 с C #
Я читаю большой файл CSV (с Читатель CSV ).Одна из прочитанных строк должна быть загружена в столбец Date SQL Server 2008.
Если текстовый файл содержит, например, строку «2010-12-31», SQL Bulkcopy без проблем загружает ее в столбец Date.
Однако, если строка '20101231', я получаю сообщение об ошибке:
Указанное значение типа String из источника данных не может быть преобразовано в дату типа указанного целевого столбца
Файл содержит 80 миллионов записей, поэтому я не могу создать таблицу данных ....
SqlBulkcopy Столбцы и т. Д. Все в порядке.Также изменение DateTime не помогает.
Я пытался
SET DATEFORMAT ymd;
Но это не помогает.
Есть идеи, как заставить SQL Server принять этот формат?В противном случае я создам собственное исправление в программе чтения CSV, но я бы предпочел что-то в SQL.
update Следуя двум ответам, я использую массовую копию SQL, как это (как предложено в Stackoverflow)в другом вопросе):
Программа чтения CSV (см. ссылку выше на codeproject) возвращает строковые значения (не строго типизированные).CSVreader реализует System.Data.IDataReader, так что я могу сделать что-то вроде этого:
using (CsvReader reader = new CsvReader(path))
using (SqlBulkCopy bcp = new SqlBulkCopy(CONNECTION_STRING))
{ bcp.DestinationTableName = "SomeTable";
// columnmappings
bcp.WriteToServer(reader); }
Все поля, поступающие из iDataReader, являются строками, поэтому я не могу использовать подход c #, если я немного не изменю вCSVreader
Поэтому мой вопрос не связан с тем, как это исправить в C #, я могу это сделать, но я хочу предотвратить это.
Это странно, потому что если вы что-то делаете в sqlкак
update set [somedatefield] = '20101231'
это также работает, только не с помощью массового копирования.
Есть идеи почему?
Спасибо за любой совет, Pleun