我们正在使用SQL批量复制将近1000万行插入到SQL Server表中。
我们在7400000次插入后收到此例外:
链接服务器'(null)'的OLE DB提供程序'STREAM'返回无效 列'[!BulkInsert] .Amount'。
的数据
如果可以解决,请告诉我们。
还有内存泄漏问题。
以下是我们的代码:
try
{
using (SqlConnection SQlConn = new SqlConnection(Common.SQLConnectionString))
{
DataTable dt1 = FillEmptyDateFields(dtDestination);
//SqlTableCreator ObjTbl = new SqlTableCreator(SQlConn);
//ObjTbl.DestinationTableName = DestinationTable;
using (System.Data.SqlClient.SqlBulkCopy bulkCopy = new System.Data.SqlClient.SqlBulkCopy(SQlConn,SqlBulkCopyOptions.TableLock,null))
{
//bulkCopy = new System.Data.SqlClient.SqlBulkCopy(SQlConn);
bulkCopy.DestinationTableName = DestinationTable;
bulkCopy.BulkCopyTimeout = 0;
bulkCopy.BatchSize = dt1.Rows.Count; // Batch Size Added.
Logger.Log("DATATABLE FINAL :" + dt1.Rows.Count.ToString(), Logger.LogType.Info);
if (SQlConn.State == ConnectionState.Closed || SQlConn.State == ConnectionState.Broken)
SQlConn.Open();
bulkCopy.WriteToServer(dt1);
SQlConn.Close();
SQlConn.Dispose();
bulkCopy.Close();
if (bulkCopy != null)
{
((IDisposable)bulkCopy).Dispose();
}
}
dt1.Dispose();
dt1 = null;
}
dtDestination.Dispose();
System.GC.Collect();
dtDestination = null;
}
catch (Exception ex)
{
Logger.Log(ex, Logger.LogType.Error);
throw ex;
}
答案 0 :(得分:0)
根据您的代码,您似乎将BatchSize设置为数据表的大小,大概是1000万行。您可能想尝试使用5000之类的值。
答案 1 :(得分:0)
也许是因为你试图将NaN值插入浮点字段?
我最近遇到了这个问题,为了弄清楚出了什么问题,我只是将所有内容插入到数据类型为NVARCHAR(MAX)的表中,然后我注意到一个值是NaN。