Retroceder   Foros del Web > Programación para sitios web > .NET > win forms

Respuesta
 
Herramientas Desplegado
Antiguo 18-abr-2007, 15:33   #1 (permalink)
loquillo7 ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 497
Alegría 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
loquillo7 está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 00:25.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93