![]() |
copiar data de bd con el comando SqlBulkCopy tengo un problema de migracion de una bd utilizo un metodo para copiar las tablas y cada 10000 registro copia en 20 segundos, pero los proximos 10000 los copia en 40 segundos , 1 min luego en 4 min y asi sucesivamnete todo el proceso demora casi una hora. Yo utilizo el comando SqlBulkCopy. Este es mi metodo de copiar tablas: public bool CopyTable(DataTable dtInfo, int iTipoConexionO, int iTipoConexionD) { DataTable dtTables = new DataTable(); CC_Conexion cn = new CC_Conexion(); int x = 0, iMax, iRecords; string sTName = dtInfo.TableName; iMax= cn.GetBatch(); try { Application.DoEvents(); switch (dtInfo.ExtendedProperties["Estado"].ToString()) { case "0": case "1": lblEstado.Text = "Copiando Tabla: " + sTName; iRecords = cn.ExecuteScalar(string.Format("SELECT COUNT(1) FROM [{0}]", sTName), iTipoConexionO); oLog.WriteLog("Registros de la tabla " + sTName + " : " + iRecords); while (x <= iRecords) { oLog.WriteLog("Obteniendo los registros " + x + " - " + Convert.ToString((x + iMax<=iRecords)?(x+iMax): iRecords) + " de la tabla " + sTName); dtTables = cn.ExecuteSelect(string.Format("SELECT * FROM [{0}]", sTName), sTName, iTipoConexionO, x, iMax).Tables[sTName]; using (SqlBulkCopy copy = new SqlBulkCopy(cn.GetCadenaDeConexion(iTipoConexionD) )) { foreach (DataRow drResult in dtInfo.Rows) { string sCName, sValor; int iLength; sCName = Convert.ToString(drResult["CName"]).Trim(); iLength = Convert.ToInt32(drResult["Length"]); sValor = Convert.ToString(drResult["Valor"]).Trim(); switch (drResult["Estado"].ToString()) { case ("0"): copy.ColumnMappings.Add(sCName, sCName); break; case ("1"): oLog.WriteLog("Agregando la columna " + sCName + " con el valor por defecto " + sValor); switch (Convert.ToString(drResult["TName"]).Trim()) { case "char": dtTables.Columns.Add(sCName, System.Type.GetType("System.String"), "'" + sValor + "'"); break; case "int": dtTables.Columns.Add(sCName, System.Type.GetType("System.Int32"), sValor); break; } copy.ColumnMappings.Add(sCName, sCName); break; case ("2"): dtTables.Columns.Add(sCName + "Temp", System.Type.GetType("System.String"), "SUBSTRING(" + sCName + ", 1, " + iLength + " )"); copy.ColumnMappings.Add(sCName + "Temp", sCName); break; } } oLog.WriteLog("Comenzando copia"); copy.BulkCopyTimeout = cn.GetTimeout(); copy.DestinationTableName = sTName; copy.WriteToServer(dtTables); oLog.WriteLog("Copia realizada"); Application.DoEvents(); x += iMax; } } oLog.WriteLog("La tabla: " + sTName + " fue copiada satisfactoriamente."); break; } return true; } catch (Exception e) { lblEstado.Text = ""; MessageBox.Show("Error copiando la tabla: " + sTName, "Error", MessageBoxButtons.OK); oLog.WriteLog("Error copiando la tabla " + sTName + ": " + e.Message); throw e; } finally { dtTables.Dispose(); dtTables = null; GC.Collect(); } } //Gracias por las ayudas |
| La zona horaria es GMT -6. Ahora son las 00:29. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.