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

Como optimizar el registro y carga de datos masivos desde archivo TXT a la BD (C#) ?

Estas en el tema de Como optimizar el registro y carga de datos masivos desde archivo TXT a la BD (C#) ? en el foro de .NET en Foros del Web. Hola a todos como están, hoy vengo con una duda, y como dice el nombre del tema, quisiera saber como podría optimizar o acelerar tanto ...
  #1 (permalink)  
Antiguo 17/01/2013, 07:55
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
De acuerdo Como optimizar el registro y carga de datos masivos desde archivo TXT a la BD (C#) ?

Hola a todos como están, hoy vengo con una duda, y como dice el nombre del tema, quisiera saber como podría optimizar o acelerar tanto la cargar de los datos de una archivo .txt a un DataGridView y el registro de datos desde el DataGridView a la Base de Datos (Mysql) que esta en una archivo .txt, pues estamos hablando de 1.000 filas en el archivo plano, ya que quisiera que este tipo de proceso se realice un poco mas rápido no digo que tanto pero quisiera que la carga y registro sea un poquito mas rápido.

La BD que estoy utilizando es MySql (phpAdmin) y como lenguaje de programación es C# en aplicativo Windows Forms.

Les pondre un pequeño codigo donde leo el archivo .txt y tomar los datos e ir insertándolos en el datagridview

Código Javascript:
Ver original
  1. List<string> listaExisten = new List<string>();
  2. listaExisten.Clear();
  3. List<string> FormatoErrorList = new List<string>();
  4. FormatoErrorList.Clear();
  5. // Minimum indica el valor mínimo de la barra.
  6. progressBarRegistros.Minimum = 0;
  7. // Maximum indica el valor máximo de la barra.
  8. progressBarRegistros.Maximum = Countveri;
  9. // Value indica desde donde se va a comenzar a llenar la barra, la nuestra iniciara desde cero.
  10. progressBarRegistros.Value = 0;
  11. // Step indica el paso de la barra, entre más pequeño sea la barra tardará más en cargar.
  12. progressBarRegistros.Step = 1;
  13. // Iniciar el Label en vacio.
  14. this.labelNumeroProgreso.Text = string.Empty;
  15.  
  16. try
  17. {
  18.     StreamReader tr = new StreamReader(this.textBoxDireccionArchivo.Text, Encoding.Default);
  19.     int oCount = 0;
  20.         int oContador = 0;
  21.         while ((TextoPlano = tr.ReadLine()) != null)
  22.         {
  23.             split = TextoPlano.Split(new Char[] { ',' }, count);
  24.  
  25.         if (split.Length == count)
  26.                 {
  27.                     Regex oRegex0 = new Regex(@"^([0-9]*)$");
  28.                         Match oMatch0 = oRegex0.Match(split[0]);
  29.  
  30.             // Aquí hay mas validaciones con expresiones regulares etc...
  31.  
  32.             DsTadable = cDsAdministrador.ConsultaAfiliado(split[5]);
  33.  
  34.             if (DsTadable.Tables[0].Rows.Count == 0)
  35.             {
  36.                 if (oMatch0.Success && oMatch1.Success && etc....)
  37.                 {
  38.                                     dataGridGestionArchivo.Rows.Add(split[0], split[1], etc.....);
  39.                                         oContador++;                                                
  40.                 }
  41.                                 else
  42.                                 {
  43.                                     string Fila = "fila[" + Convert.ToString(oCount) + "]";
  44.                                         FormatoErrorList.Add(Fila);
  45.                                 }
  46.                         }
  47.                         else
  48.                         {
  49.                                 string FilaExiste = "fila[" + Convert.ToString(oCount) + "] - " + split[5] + " - " + split[6] + " - " + split[8];
  50.                             listaExisten.Add(FilaExiste);
  51.                         }
  52.             }
  53.         split = null;
  54.                 oCount++;
  55.         // Esta instrucción avanza la posición actual de la barra.
  56.                 progressBarRegistros.PerformStep();
  57.                 // Updates the label to show available drive space.
  58.                 this.labelNumeroProgreso.Text = oContador + " Registros Procesados de " + progressBarRegistros.Value;                
  59.     }
  60. }
  61. catch (Exception ex)
  62. {
  63.     //
  64. }

Y este es cuando tomo los datos de el datagridview para la BD:

Código Javascript:
Ver original
  1. listError.Clear();
  2.                     // Minimum indica el valor mínimo de la barra.
  3.                     progressBarRegistros.Minimum = 0;
  4.                     // Maximum indica el valor máximo de la barra.
  5.                     progressBarRegistros.Maximum = this.dataGridGestionArchivo.RowCount;
  6.                     // Value indica desde donde se va a comenzar a llenar la barra, la nuestra iniciara desde cero.
  7.                     progressBarRegistros.Value = 0;
  8.                     // Step indica el paso de la barra, entre más pequeño sea la barra tardará más en cargar.
  9.                     progressBarRegistros.Step = 1;
  10.                     // Iniciar el Label en vacio.
  11.                     this.labelNumeroProgreso.Text = string.Empty;
  12.  
  13.                     if (ValorCheck == "MSVAL")
  14.                     {
  15.                         int Count = 0;
  16.                         while (this.dataGridGestionArchivo.Rows.Count != 0)
  17.                         {
  18.                             int i = 0;
  19.                             foreach (DataGridViewRow Row in dataGridGestionArchivo.Rows)
  20.                             {
  21.                                 string CodFormUSER = GetRandomNumbers(5);
  22.                                 string CodEpsUSER = Convert.ToString(Row.Cells["Entidad"].Value);
  23.                                 string TipoDocUSER = Convert.ToString(Row.Cells["TipoDoc"].Value);
  24.                                 string IdentificacionUSER = Convert.ToString(Row.Cells["Identificacion"].Value);
  25.                                 // etc.....
  26.  
  27.                                 CAddUSER oCAddUSER = new CAddUSER(CodFormUSER, CodEpsUSER, TipoDocUSER, IdentificacionUSER, etc.......);
  28.                                 CAdministrador oCAdministradorUSER = new CAdministrador();
  29.  
  30.                                 if (oCAdministradorUSER.RegistrarUSER(oCAddUSER) == true)
  31.                                 {
  32.                                     this.dataGridGestionArchivo.Rows.RemoveAt(i);
  33.                                     Count++;
  34.                                 }
  35.                                 else
  36.                                 {
  37.                                     string CadenaText = CodEpsUSER + "," + TipoDocUSER + "," + IdentificacionUSER + "," + etc.....;
  38.                                     listError.Add(CadenaText);
  39.                                     this.dataGridGestionArchivo.Rows.RemoveAt(i);
  40.                                 }
  41.                                 i++;
  42.                                 // Esta instrucción avanza la posición actual de la barra.
  43.                                 progressBarRegistros.PerformStep();
  44.                                 // Updates the label to show available drive space.
  45.                                 this.labelNumeroProgreso.Text = Count + " Registros Ingresados a la Base de Datos de " + progressBarRegistros.Value;
  46.                             }
  47.                         }
  48.             }
  49.                 else
  50.                     }
  51.                              // etc........
  52.                     }

Pues yo se que con 1.000 filas el proceso se demorara pero no abra una forma de optimizar estos dos procesos para que sea un poco mas rápido ?
  #2 (permalink)  
Antiguo 17/01/2013, 08:46
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Como optimizar el registro y carga de datos masivos desde archivo TXT a la

Sabes si MySQL tiene o soporta el BulkCopy?

Por en SqlServer esto ayuda a hacer volcado de datos rapidamente.

Si quieres dale una miradita a este ejemplo y averiguas si MySQL tambien lo tiene

http://msdn.microsoft.com/en-us/libr...code-snippet-2

Saludes
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #3 (permalink)  
Antiguo 17/01/2013, 09:32
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Como optimizar el registro y carga de datos masivos desde archivo TXT a la

Pues parece que con lo que he leído no seré capaz de utilizar SqlBulkCopy, ya que sólo funciona con SQL Server. Pues entonces hay otra manera de realizar estos registros masivos, pues o podria "crear varios INSERT en forma secuencial y llegado cierto número de ciclos enviar todo al mismo tiempo" ?
  #4 (permalink)  
Antiguo 18/01/2013, 12:43
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Como optimizar el registro y carga de datos masivos desde archivo TXT a la

Bueno parece que me tocara crear varios INSERT en forma secuencial y llegado cierto número de ciclos enviar todo al mismo tiempo, es la única opción que me queda, te todas formas gracias a los que me ayudaron.
  #5 (permalink)  
Antiguo 18/01/2013, 15:38
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Como optimizar el registro y carga de datos masivos desde archivo TXT a la

Ya buscaste en los foros de MySQL insercion masiva de datos?

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #6 (permalink)  
Antiguo 18/01/2013, 16:20
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 2 meses
Puntos: 41
Respuesta: Como optimizar el registro y carga de datos masivos desde archivo TXT a la

Si ya he consulta por todos la dos y proponen los INSERT en forma secuencial y el LOAD DATA INFILE en MySQL.

Etiquetas: bd, masivos, registro, sql, txt
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 15:20.