Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/01/2013, 07:55
Avatar de DeivisAndres
DeivisAndres
 
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 3 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 ?