ASP.NET SqlBulkCopy不会在服务器上插入所有记录

时间:2013-12-11 13:55:21

标签: asp.net sql .net database sqlbulkcopy

我不知道为什么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上正常工作,但在服务器上却没有。

1 个答案:

答案 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文件可能正常工作的情况,因为文件的数据导致驱动程序猜测一种数据类型,而另一个包含其他数据的文件导致驱动程序猜测另一种数据类型。这可能会导致您的应用崩溃。