0
我已经实现了一个使用IDataReader的类作为使用SqlBulkCopy的项目的一部分。我已经发布了一些相关的代码在这里IDataReader实现中的索引值问题
public bool Read()
{
var result = !fileStream.EndOfStream;
if (result)
{
delimRow = fileStream.ReadLine();
splitRowValues = delimRow.Split(_delimiters);
readRowCount++;
}
return result;
}
private string[] Row
{
get { return splitRowValues; }
}
public object GetValue(int i)
{
return Row[i];
}
的代码段,它使用使用SqlBulkCopy和IDataReader的
SqlBulkCopy bulkInsert = new SqlBulkCopy(Constants.DBConnection, SqlBulkCopyOptions.UseInternalTransaction);
bulkInsert.BatchSize = 500;
bulkInsert.DestinationTableName = Constants.DestinationTable;
bulkInsert.WriteToServer(reader);
当运行在WriteToServer方法,我发现到的GetValue()首先调用开头索引值为1,索引的最终值比列数小1。由于这个问题,批量加载最终会跳过一列。
我无法找到为什么GetValue()中的索引没有将值从1递增到列数。实际上,这个值应该从0开始并且比列数少一个。请让我知道是否有人帮我找到原因。
太棒了!这是原因。我删除了标识列来验证,现在索引值从0开始并遍历所有列。我添加了一个列映射,以避免让SqlBulkCopy做猜测工作。 – wired2code