Foros del Web » Programación para mayores de 30 ;) » .NET »

Ayuda con un Proceso de Inesrt... C#

Estas en el tema de Ayuda con un Proceso de Inesrt... C# en el foro de .NET en Foros del Web. Que tal compañero... Estoy haciendo una aplicacion, el cual cargo una tabla de acces, pero esta tabla tiene mas de 20 mil registros, y esta ...
  #1 (permalink)  
Antiguo 23/04/2010, 11:40
Avatar de DarkWatch  
Fecha de Ingreso: marzo-2010
Ubicación: Mexico
Mensajes: 177
Antigüedad: 14 años, 1 mes
Puntos: 2
Ayuda con un Proceso de Inesrt... C#

Que tal compañero...


Estoy haciendo una aplicacion, el cual cargo una tabla de acces, pero esta tabla tiene mas de 20 mil registros, y esta tabla la paso a una tabla de SQL, como el proceso es muy largo y tarda varios minutos, lo vincule a un backgroundworker, y un progres bar para que el usuario pudiera ver el porcentaje del proceso, parece funcionar muy bien sin embargo, la tabla de acces tiene un total de 20 mil registro, y despues de terminar mi proceso la tabla de SQL, inserto solo 19,500 registro, aque se deberá esto? o alguna idea de como podre hacer esto de una manera mas sencilla, alguna idea diferente...

les Paso el Código...

Codigo de insertar en SQL, ya cargue la tabla acces a un dataset..

Código:
 private void bwNomina_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i < dsTrab.Tables["Nomina"].Rows.Count; i++)
                if (bwNomina.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    if (rbnomina.Checked)
                    {
                        var.Clave = int.Parse(dsTrab.Tables["Nomina"].Rows[i]["Num_Trabajador"].ToString());
                        var.Año = int.Parse(dsTrab.Tables["Nomina"].Rows[i]["AAAA"].ToString());
                        var.Periodo = int.Parse(dsTrab.Tables["Nomina"].Rows[i]["Periodo"].ToString());
                        var.Claveper = int.Parse(dsTrab.Tables["Nomina"].Rows[i]["Clave"].ToString());
                        var.Importe = double.Parse(dsTrab.Tables["Nomina"].Rows[i]["Cantidad"].ToString());
                        var.Unidades = double.Parse(dsTrab.Tables["Nomina"].Rows[i]["Unidades"].ToString());
                        var.Mes = int.Parse(dsTrab.Tables["Nomina"].Rows[i]["Mes"].ToString());
                        var.Cclave = int.Parse(dsTrab.Tables["Nomina"].Rows[i]["Cclave"].ToString());
                        var.FecIni = dsTrab.Tables["Nomina"].Rows[i]["FechaInicio"].ToString();
                        var.FecFin = dsTrab.Tables["Nomina"].Rows[i]["FechaFinal"].ToString();
                        Nom.Guarda(var);
                    }
                    bwNomina.ReportProgress(i);
                }
        }
El metodo de Nom.Guardar(Var); tiene este codigo...
Código:
public void Guarda(AccesImportar var)
        {
            try
            {
                conex.Open();
                comand = new SqlCommand("sp_AltaNomina", conex);
                comand.CommandType = CommandType.StoredProcedure;
                comand.Parameters.AddWithValue("@Num_Trabajador", var.Clave);
                comand.Parameters.AddWithValue("@AAAA", var.Año);
                comand.Parameters.AddWithValue("@Periodo", var.Periodo);
                comand.Parameters.AddWithValue("@Clave", var.Claveper);
                comand.Parameters.AddWithValue("@Cantidad", var.Importe);
                comand.Parameters.AddWithValue("@Unidades", var.Unidades);
                comand.Parameters.AddWithValue("@Mes", var.Mes);
                comand.Parameters.AddWithValue("@Cclave", var.Cclave);
                comand.Parameters.AddWithValue("@FechaInicio", var.FecIni);
                comand.Parameters.AddWithValue("@FechaFinal", var.FecFin);
                comand.ExecuteNonQuery();
                conex.Close();
            }
            catch { conex.Close(); throw; }
        }
Si pueden ayudarme porfavor se los agradeceria, o alguna idea por favor
  #2 (permalink)  
Antiguo 23/04/2010, 17:02
 
Fecha de Ingreso: octubre-2000
Mensajes: 1.692
Antigüedad: 23 años, 6 meses
Puntos: 19
Respuesta: Ayuda con un Proceso de Inesrt... C#

Hola

Primero podrías probar de

1- Cuando cargas los datos de access cuantos registros tiene, asegurate que hayas levantado 20.000
2- Asegurate antes de iniciar la el paso de access a sql que también tengas para insertar 20.000
3- Si lo anterior da bien, proba primero cargar la mitad de los registros, y luego en otros proceso los restantes (osea hace dos pasos para descartar problemas de capacidad o algo de eso)

Finalmente trata de ver hasta donde llega la carga de registros, si los que faltan son los útimos 500 o al azar, y fijate en alguno de los registros que no se insertaron y trata de insertarlo vos a mano para descartar algún problema por el tamaño de los caracteres o algo de eso.

También fijate de momentaneamente quitar todos los TRY que tengas. Bueno eso se me ocurre por ahora.suerte
__________________
PD: Con amor, fe, amor a Dios y amistad podemos hacer un mundo mejor!!!!
  #3 (permalink)  
Antiguo 23/04/2010, 17:26
Avatar de DarkWatch  
Fecha de Ingreso: marzo-2010
Ubicación: Mexico
Mensajes: 177
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Ayuda con un Proceso de Inesrt... C#

hola gracias por tu ayuda..

los primeros pasos ya me asegure de que contengan todos los datos y en efectos los 20.000los trae el dataset (que cargo con la tabla de acces), entonces al momento de hacer el for no hay problema con los registro pues este marca los 20.000..

voy a intentar hacerlo en 2 proceso para que no tenga los problemas de capacidad porque son bastantes registros, creo yo, para un dataaset..
oucuparia un poco de ayuda para cargar la mitad de la tabla, como seria el select para que me cargara la mitad de registro de esa tabla si me puedes ayudar en eso???

Gracias por tu ayuda...
  #4 (permalink)  
Antiguo 25/04/2010, 09:51
 
Fecha de Ingreso: octubre-2000
Mensajes: 1.692
Antigüedad: 23 años, 6 meses
Puntos: 19
Respuesta: Ayuda con un Proceso de Inesrt... C#

Bueno, vos tenes el dataSet que tiene los 20.000 registros.

Por lo tanto recorres tu dataSet algo así:

For i = 1 to 10.000

DataSet.Tables("Mitabla").Row(i)("Campo")

Next

Disculpa no recuerdo la sintaxis del FOR y del recorrido del dataTable, pero ese es la idea. Recorres los primeros registros 10000 del dataTable

Sino podes en tu select meter un TOP:

"Select Top 10000 form miTabla"
__________________
PD: Con amor, fe, amor a Dios y amistad podemos hacer un mundo mejor!!!!
  #5 (permalink)  
Antiguo 26/04/2010, 11:25
Avatar de DarkWatch  
Fecha de Ingreso: marzo-2010
Ubicación: Mexico
Mensajes: 177
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Ayuda con un Proceso de Inesrt... C#

Lo tengo ya hice los procesos en 2 paso ahora voy a ver si esta insertando todos los datos correctamente, y eso espero porque quiero que esos registros los inserte bien

Gracias por tu ayuda...
  #6 (permalink)  
Antiguo 26/04/2010, 11:40
 
Fecha de Ingreso: agosto-2008
Mensajes: 101
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Ayuda con un Proceso de Inesrt... C#

Hola.

Esta instrucccion:

Saludos.
  #7 (permalink)  
Antiguo 26/04/2010, 19:28
Avatar de DarkWatch  
Fecha de Ingreso: marzo-2010
Ubicación: Mexico
Mensajes: 177
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Ayuda con un Proceso de Inesrt... C#

Phillip....

Creo que te falto poner la instruccion jejeje
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:37.