sqlbulkcopy 使用DataTable作为数据源的数据类型问题--来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier
今天做批量插入的时候,SQLSERVER总是报错,错误提示“来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier”。
首先核对了一下定义的dataTable中的DataColumn[]的顺序和数量,发现和数据库的表结构是一致的,而且把代码中对dataRow[]对应位置赋值的语句屏蔽后,执行成功。
因此可以确定主要还是由于类型转换的时候的问题。
后来,在对dataRow[]对应位置赋值的时候,强行用new Guid()方法把String类型转成GUID类型,还是有问题。
经过不断的查找资料,后来发现,问题出现在定义dataTable中的DataColumn[]时,我原先的代码,对数据库中相应字段的定义是这样的:new DataColumn("FolderID"),
应该改成下面这样就可以了new DataColumn("FolderID",typeof(System.Data.SqlTypes.SqlGuid)),就是在定义的时候,就指定类型。
至于为何,对于数据库中nvarchar,datetime,int,decimal这些类型的字段,在定义时不需要指定类型,就不清楚了。只能后续再继续研究研究了