对于批量数据导入而言,的确非常省时间。但有时遇到问题由于是批量导入的数据,所以错误也是无从查起。
最近遇到一个问题,导入时报数据被截断,但由于数据量太大,肉眼也无法查看问题所在。就试图扩展各自段大小。
最后锁定在了某字段,扩展到一定大小后,可以批量插入数据。
故而想要反查已插入数据中到底哪个数据字段较长,很不幸,在数据库中使用len函数查看该字段数据,竟没有比较长的。上网查了下可能原因也基本是说数据库自段本来就不长,或者有单引号云云。
后来怀疑是否SqlBulkCopy是否存在某种bug,故而在系统中改写代码,用单个sql的插入数据方式,用循环逐条导入。结果是没问题。难道真的是SqlBulkCopy有某种bug?上网搜了一通,竟没有一条说有什么bug之类的。
偶然一次发现,len函数取数据长度是去了尾部空格的。
故而在代码中对用于批量导入的数据,导入前进行一次遍历,将该字段中数据用TrimEnd()去尾部空格。结果批量导入成功了!
但为何单条sql导入的时候没问题?
没错,单条sql导入的时候就是没问题,它会直接把自段大小外的空字符串(注意,尾部多出来的都是空字符串才行)去掉,并将剩余内容插入数据库。 但是批量导入并不会有该机制,就直接会报截断错误。