我正在尝试使用以下命令进行批量插入SqlBulkCopy
来自由 SQL Server 管理导入导出向导创建的平面文件的类。这些文件以逗号分隔。
文件中的一行可能如下所示:
{DCAD82A9-32EC-4351-BEDC-2F8291B40AB3},{ca91e768-072d-4e30-aaf1-bfe32c24008f},900001:1792756,900001:1792757,basladdning,2011-04-29 02:54: 15.380000000,巴斯拉德宁,2011- 04-29 02:54:15.380000000,{20A3C50E-8029-41DE-86F1-DDCDB9A78BA5}
我得到的错误是:
System.InvalidOperationException 未处理
Message=来自数据源的 String 类型的给定值无法转换为类型
指定目标列的唯一标识符。
所以问题是从字符串到 GUID 的转换。
我已经尝试过以下方法:
- 尝试了不同的编码,UTF8和ANSI
- 删除了 GUIDS 周围的 { }
- 在 GUIDS 周围添加了“ ”,带或不带 { }
有什么建议么?在平面文件中,“”所在的列也具有 Guid 作为数据类型。该列为 NULL,向导将其导出为 ''。这会是问题所在吗?
代码:
using (var file = new StreamReader(filePath))
using (var csv = new CsvReader(file, false))
using (var bcp = new SqlBulkCopy(CreateConnectionString()))
{
bcp.DestinationTableName = "table";
bcp.WriteToServer(csv);
}
表定义:
CREATE TABLE [beata].[T_FeatureInstance](
[FeatureInstanceId] [uniqueidentifier] NOT NULL,
[FeatureInstanceParentId] [uniqueidentifier] NULL,
[FeatureTypeAliasId] [uniqueidentifier] NOT NULL,
[Uuid] [varchar](1000) NOT NULL,
[VersionId] [varchar](50) NOT NULL,
[SkapadAv] [varchar](255) NULL,
[Skapad] [datetime] NOT NULL,
[UppdateradAv] [varchar](255) NOT NULL,
[Uppdaterad] [datetime] NOT NULL,
[Gs] [uniqueidentifier] NOT NULL,