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 originalList<string> listaExisten = new List<string>();
listaExisten.Clear();
List<string> FormatoErrorList = new List<string>();
FormatoErrorList.Clear();
// Minimum indica el valor mínimo de la barra.
progressBarRegistros.Minimum = 0;
// Maximum indica el valor máximo de la barra.
progressBarRegistros.Maximum = Countveri;
// Value indica desde donde se va a comenzar a llenar la barra, la nuestra iniciara desde cero.
progressBarRegistros.Value = 0;
// Step indica el paso de la barra, entre más pequeño sea la barra tardará más en cargar.
progressBarRegistros.Step = 1;
// Iniciar el Label en vacio.
this.labelNumeroProgreso.Text = string.Empty;
try
{
StreamReader tr = new StreamReader(this.textBoxDireccionArchivo.Text, Encoding.Default);
int oCount = 0;
int oContador = 0;
while ((TextoPlano = tr.ReadLine()) != null)
{
split = TextoPlano.Split(new Char[] { ',' }, count);
if (split.Length == count)
{
Regex oRegex0 = new Regex(@"^([0-9]*)$");
Match oMatch0 = oRegex0.Match(split[0]);
// Aquí hay mas validaciones con expresiones regulares etc...
DsTadable = cDsAdministrador.ConsultaAfiliado(split[5]);
if (DsTadable.Tables[0].Rows.Count == 0)
{
if (oMatch0.Success && oMatch1.Success && etc....)
{
dataGridGestionArchivo.Rows.Add(split[0], split[1], etc.....);
oContador++;
}
else
{
string Fila = "fila[" + Convert.ToString(oCount) + "]";
FormatoErrorList.Add(Fila);
}
}
else
{
string FilaExiste = "fila[" + Convert.ToString(oCount) + "] - " + split[5] + " - " + split[6] + " - " + split[8];
listaExisten.Add(FilaExiste);
}
}
split = null;
oCount++;
// Esta instrucción avanza la posición actual de la barra.
progressBarRegistros.PerformStep();
// Updates the label to show available drive space.
this.labelNumeroProgreso.Text = oContador + " Registros Procesados de " + progressBarRegistros.Value;
}
}
catch (Exception ex)
{
//
}
Y este es cuando tomo los datos de el datagridview para la BD:
Código Javascript
:
Ver originallistError.Clear();
// Minimum indica el valor mínimo de la barra.
progressBarRegistros.Minimum = 0;
// Maximum indica el valor máximo de la barra.
progressBarRegistros.Maximum = this.dataGridGestionArchivo.RowCount;
// Value indica desde donde se va a comenzar a llenar la barra, la nuestra iniciara desde cero.
progressBarRegistros.Value = 0;
// Step indica el paso de la barra, entre más pequeño sea la barra tardará más en cargar.
progressBarRegistros.Step = 1;
// Iniciar el Label en vacio.
this.labelNumeroProgreso.Text = string.Empty;
if (ValorCheck == "MSVAL")
{
int Count = 0;
while (this.dataGridGestionArchivo.Rows.Count != 0)
{
int i = 0;
foreach (DataGridViewRow Row in dataGridGestionArchivo.Rows)
{
string CodFormUSER = GetRandomNumbers(5);
string CodEpsUSER = Convert.ToString(Row.Cells["Entidad"].Value);
string TipoDocUSER = Convert.ToString(Row.Cells["TipoDoc"].Value);
string IdentificacionUSER = Convert.ToString(Row.Cells["Identificacion"].Value);
// etc.....
CAddUSER oCAddUSER = new CAddUSER(CodFormUSER, CodEpsUSER, TipoDocUSER, IdentificacionUSER, etc.......);
CAdministrador oCAdministradorUSER = new CAdministrador();
if (oCAdministradorUSER.RegistrarUSER(oCAddUSER) == true)
{
this.dataGridGestionArchivo.Rows.RemoveAt(i);
Count++;
}
else
{
string CadenaText = CodEpsUSER + "," + TipoDocUSER + "," + IdentificacionUSER + "," + etc.....;
listError.Add(CadenaText);
this.dataGridGestionArchivo.Rows.RemoveAt(i);
}
i++;
// Esta instrucción avanza la posición actual de la barra.
progressBarRegistros.PerformStep();
// Updates the label to show available drive space.
this.labelNumeroProgreso.Text = Count + " Registros Ingresados a la Base de Datos de " + progressBarRegistros.Value;
}
}
}
else
}
// etc........
}
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 ?