CqlBulkCopy与C#中的Bounds异常之外的列映射

时间:2014-05-28 17:09:28

标签: c# sql-server excel sqlbulkcopy datareader

我在使用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列数据。就像我的列映射由于某种原因而受到字段计数的限制。有没有办法解决?

0 个答案:

没有答案