ха-ха .. и ты кусаешься сильно ;-)
я есть проблема преобразования строки в дату с использованием SQL Bulkcopy в asp.net 3.5 с C #
Я прочитал большой файл CSV (сCSV-ридер). Одна из прочитанных строк должна быть загружена в столбец Дата SQL Server 2008.
Если текстовый файл содержит, например, строку «2010-12-31», SQL Bulkcopy без проблем загружает его в столбец «Дата».
Однако, если строка '20101231', я получаю ошибку:
Заданное значение типа String из источника данных не может быть преобразовано в дату типа указанного целевого столбца.
Файл содержит 80 миллионов записей, поэтому я не могу создать таблицу данных ....
SqlBulkcopy Columnmappings и т. Д. Все в порядке. Также изменение DateTime не помогает.
Я пытался
SET DATEFORMAT ymd;
Но это не помогает.
Любые идеи, как сказать SQL Server принять этот формат? В противном случае я создам собственное исправление в программе чтения CSV, но я бы предпочел что-то в SQL.
Обновить Следуя двум ответам, я использую 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