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