我在 asp.net 3.5 和 C# 中使用 SQL Bulkcopy 有一个字符串到日期的转换问题
我读了一个大的 CSV 文件(使用CSV 阅读器)。读取的字符串之一应加载到 SQL Server 2008 日期列中。
例如,如果文本文件包含字符串“2010-12-31”,SQL Bulkcopy 会将它毫无问题地加载到日期列中。
但是,如果字符串是'20101231',我会得到一个错误:
来自数据源的字符串类型的给定值无法转换为指定目标列的日期类型
该文件包含 8000 万条记录,因此我无法创建数据表....
SqlBulkcopy Columnmappings 等都可以。更改为 DateTime 也无济于事。
我试过
SET DATEFORMAT ymd;
但这无济于事。
任何想法如何告诉 SQL Server 接受这种格式?否则,我将在 CSV 阅读器中创建自定义修复,但我更喜欢 SQL 中的某些内容。
更新 跟进两个答案,我正在使用这样的 SQL bulkcopy(正如 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'
它也有效,只是不适用于批量复制。
知道为什么吗?
感谢您的任何建议,普莱恩