我在使用SqlBulkCopy
将一些数据从Excel复制到SQL Server表时遇到了问题。
基本上,我需要将Excel文件的某些行中的所有内容复制到表中。我使用直接SqlBulkCopy
没有列映射,但仅在修改Excel文件(删除当前未使用/空列)之后才有效。由于我们的工作流程,我们需要Excel文件保持不变,所以我尝试使用列映射。 (我更愿意避免使用临时表,因为我的SQL技能并不那么好)
我的代码完美无缺,但它不会复制最后的11列。如果我将最终数字(213)增加到224以尝试包含这些数字,我会收到IndexOutOfRangeException
错误。
数据读取器说字段数为212(有多少非空白列,但实际总列数为224.如果我尝试没有列映射,则数据关闭(到右边)12列。
using (DbConnection excelConnection = factory.CreateConnection())
{
SqlConnection sqlConn = new SqlConnection(sqlConnectionString);
excelConnection.ConnectionString = connString;
using (DbCommand command = excelConnection.CreateCommand())
{
command.CommandText = "SELECT * FROM [Master List$A18:HD" + (17 + cusipcount) + "]";
sqlConn.Open();
excelConnection.Open();
using (DbDataReader dr = command.ExecuteReader())
{
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlConnectionString))
{
bulkcopy.DestinationTableName = "Bond";
int i = 0;
for (int j = 0; j < 27; j++, i++)
{
bulkcopy.ColumnMappings.Add(j, i);
}
for (int j = 28; j < 94; j++, i++)
{
bulkcopy.ColumnMappings.Add(j, i);
}
for (int j = 105; j < 215; j++, i++)
{
bulkcopy.ColumnMappings.Add(j, i);
}
bulkcopy.WriteToServer(dr);
}
}
excelConnection.Close();
sqlConn.Close();
}
所以基本上我需要我达到212,j到224.我只是无法弄清楚如何让我的源索引大于212来获取最后11列数据。就像我的列映射由于某种原因而受到字段计数的限制。有没有办法解决?