我不知道为什么SqlBulkCopy没有插入读者的所有记录。代码:
using (OleDbDataReader dr1 = cmd.ExecuteReader())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ss, SqlBulkCopyOptions.TableLock, null))
{
bulkCopy.BulkCopyTimeout = 0;
bulkCopy.BatchSize = 500;
bulkCopy.DestinationTableName = tableName;
try
{
bulkCopy.WriteToServer(dr1);
}
catch (Exception ex)
{
Log.LogSystemLog(ex.ToString());
return false;
}
}
GC.Collect();
dr1.Close();
}
我想批量复制约300k条记录。它在我从localhost运行到同一个数据库时工作,但是当我从服务器运行它时 - 它总是插入~7k记录......并且没有错误或异常。在服务器上可以使用4GB空闲RAM。在localhost~1,5GB。
我不知道为什么它在localhost上正常工作,但在服务器上却没有。
答案 0 :(得分:0)
我遇到了同样的问题,通过在我的连接字符串中添加以下内容来解决。
IMEX = 1
示例:强>
string connectionString =“Provider = Microsoft.ACE.OLEDB.12.0;” +“数据源=”+ Server.MapPath(rutacom)+“;” +“扩展属性='Excel 12.0 Xml; HDR = YES; IMEX = 1'”;
在我的localhost工作正常,但不在服务器上。
试试吧:)
备注:强>
“HDR =是;”表示第一行包含列名,而不是数据。 “HDR =无;”表明相反。
始终使用IMEX = 1是检索混合数据列数据的更安全的方法。考虑一个Excel文件可能正常工作的情况,因为文件的数据导致驱动程序猜测一种数据类型,而另一个包含其他数据的文件导致驱动程序猜测另一种数据类型。这可能会导致您的应用崩溃。