Estamos utilizando la copia masiva de SQL para insertar casi 10 millones de filas en una tabla de SQL Server.Excepción y problema de la memoria en SQL Bulk Copy
Nos recibieron esta excepción después 7400000 inserciones:
proveedor OLE DB 'STREAM' para el servidor vinculado '(null)' devueltos datos no válidos para la columna '.Amount [BulkInsert!].
Háganos saber si puede resolver esto.
También hay un problema de pérdida de memoria.
continuación es nuestro código:
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;
}
inserte en lotes de menos registros – dotNETbeginner
Dudo que la excepción haya sido la causa de la fuga de mi memoria, sino que apostaría a ubicar la fila problemática (realmente parece que hay una). Al igual que en los comentarios anteriores, debe disminuir BatchSize a un valor mucho más bajo, quizás incluso a 100. De esta forma, cuando ocurra una excepción, sabrá que su fila ofensiva está (Excepción + - 100) filas ubicadas. Me gustaría dividir los datos de origen de (ExceptionPoint-100) hasta el final y reanudé mi importación desde datos splited. Cuando todo está bien, puede volver a su enfoque actual. Espero que esto ayude: D –
Como refuerzos del comentario anterior, eche un vistazo a la respuesta de Nick Tompson a su propia pregunta en http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/d7d3d2aa-c5b6- 4a96-9d17-354e498c487c? Prof = required –