使用 C# 从 Excel 2007 批量上传 SQL 服务器时出错

Posted

技术标签:

【中文标题】使用 C# 从 Excel 2007 批量上传 SQL 服务器时出错【英文标题】:Error in Bulk Upload in SQL server from Excel 2007 using C# 【发布时间】:2016-03-18 14:04:42 【问题描述】:

我正在尝试使用批量上传插入 SQL。当我在本地使用时,它运行良好,甚至也在测试实时 URL 上工作。但是当我在 Live 上上传时,它会在上传 10000 行后中断。

下面是我的代码:

public bool ExportExcelToSql (DataTable DT)
    
        bool result = false;
        tableColumns = "*";
        try
        
            using (var connection = new OleDbConnection(_excelConnectionString))
            
                connection.Open();
                DataTable dt = null;
                dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                _excelSheetName = dt.Rows[0]["TABLE_NAME"].ToString();
                var command = new OleDbCommand("Select " + tableColumns + " FROM [" + _excelSheetName + "]", connection);
                command.CommandTimeout = 6000;
                using (DbDataReader dr = command.ExecuteReader())
                
                    string conString = _sqlConnectionString;
                    var sqlConn = new SqlConnection(conString);
                    sqlConn.Open();

                    using (var bulkCopy = new SqlBulkCopy(sqlConn))
                    
                        bulkCopy.BulkCopyTimeout = 6000;
                        bulkCopy.DestinationTableName = tableName.ToString();
                        for (int i = 0; i < DT.Rows.Count; i++)
                        
                            bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(DT.Rows[i][0].ToString(), DT.Rows[i][1].ToString(),));
                        
                        bulkCopy.WriteToServer(dr);
                    
                    result = true;
                
            
        
        catch (Exception ex)
        
            throw ex;
        
        return result;
    

【问题讨论】:

你所说的“它坏了”是什么意思?出了什么问题?是否发生异常?如果是这样,异常消息和内部异常(如果有)是什么?除了向我们展示了一堆代码并让我们猜测它有什么问题之外,您没有提供有关您的问题的太多细节。 尝试上传较小的块(例如 300 行),并在每次达到块限制时提交。 @user1629464 如果您要做的只是抛出异常,请不要在方法中放置一个 catch 块。执行throw ex 也会主动损害您的错误处理和诊断,因为它会杀死堆栈跟踪。 没有异常也没有错误消息出现,即使我尝试使用 10000 行时它运行良好,但是当我增加行数时它会失败,没有任何异常。 【参考方案1】:

我会将文件分成几块并一次导入一个。不,在 100,000 行之后没有这样的限制。我怀疑问题在于该文件与格式文件不匹配,或者您使用 SQL Express 2008 R2 之类的东西被限制为 4GB 数据库大小。

【讨论】:

我检查了文件格式没有任何问题。当我删除一些行时,它可以工作。工作到 10k 行。当我尝试使用 50k 行时,它毫无例外地失败了。

以上是关于使用 C# 从 Excel 2007 批量上传 SQL 服务器时出错的主要内容,如果未能解决你的问题,请参考以下文章

从excel表格读取数据用Java代码实现批量上传写入数据库

java 使用poi操作Excel(2003,2007)实现数据批量导入的一般思路

C#:Excel 2007 插件,如何挂钩 Windows 激活和停用事件

将变量从 Excel 2007 自定义任务窗格传递到托管 PowerShell

如何在 C# 中将文件导出到 excel 2007+

ABAPExcel剪贴板内容批量上传实现