gpt4 book ai didi

sql-server - SQL批量复制中的异常和内存问题

转载 作者:行者123 更新时间:2023-12-03 01:00:26 24 4
gpt4 key购买 nike

我们正在使用 SQL 批量复制将近 1000 万行插入 SQL Server 表中。

我们在 7400000 次插入后收到此异常:

OLE DB provider 'STREAM' for linked server '(null)' returned invalid data for column '[!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;
}

最佳答案

根据您的代码,您似乎将 BatchSize 设置为数据表的大小,大概是 1000 万行。您可能想尝试使用 5000 之类的值。

关于sql-server - SQL批量复制中的异常和内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12832787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com