使用 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 激活和停用事件