post icon

Importar archivos CSV con C# y SqlBulkCopy

Unos meses atrás vimos como Importar datos de un fichero CSV en SQL Server y ahora lo veremos como hacerlo desde una aplicación cliente. Principalmente nos servirá si pretendemos que el usuario no tenga acceso a rutas que pueda acceder directamente el servidor, ya sean locales o remotas.

Existen varias maneras de procesar este tipo de archivos, pero lo mejor es utilizar la clase SqlBulkCopy que ofrece el framework de .net a partir de la versión 2.0, por su velocidad y bajo consumo de recursos.

En el ejemplo que expongo, se lee un fichero que contiene información de ventas

try
{
	DataTable dtVentas = new DataTable("Ventas");

	dtVentas.Columns.Add("NroFactura", typeof(String));
	dtVentas.Columns.Add("TipoCambio", typeof(String));
	dtVentas.Columns.Add("RazonSocial", typeof(String));
	dtVentas.Columns.Add("RUC", typeof(String));
	dtVentas.Columns.Add("Grabado10", typeof(String));
	dtVentas.Columns.Add("Grabado5", typeof(String));
	dtVentas.Columns.Add("Iva10", typeof(String));
	dtVentas.Columns.Add("Iva5", typeof(String));
	dtVentas.Columns.Add("Exentas", typeof(String));
	dtVentas.Columns.Add("Total", typeof(String));

	if (System.IO.File.Exists(txtArchivo.Text))
	{
		using (StreamReader Leer = new StreamReader("C:\\Ejemplo.csv"))
		{
			string Linea;
			while ((Linea = Leer.ReadLine()) != null)
			{
				string[] campos = Linea.Split(',');

				if (campos.Length == 10)
				{
					dtVentas.Rows.Add(campos[0], campos[1], campos[2], campos[3], campos[4],
						campos[5], campos[6], campos[7], campos[8], campos[9]);
				}
			}

			if (tVentas.Rows.Count > 0)
			{
				dataGridView1.DataSource = dtVentas;

				using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy("Data Source=192.168.1.1; Initial Catalog=Ventas; User ID=usuario; Password=*******;"))
				{
					sqlBulkCopy.DestinationTableName = "ListaVentas";

					sqlBulkCopy.ColumnMappings.Add("NroFactura", "NroFactura");
					sqlBulkCopy.ColumnMappings.Add("TipoCambio", "TipoCambio");
					sqlBulkCopy.ColumnMappings.Add("RazonSocial", "RazonSocial");
					sqlBulkCopy.ColumnMappings.Add("RUC", "RUC");
					sqlBulkCopy.ColumnMappings.Add("Grabado10", "Grabado10");
					sqlBulkCopy.ColumnMappings.Add("Grabado5", "Grabado5");
					sqlBulkCopy.ColumnMappings.Add("Iva10", "Iva10");
					sqlBulkCopy.ColumnMappings.Add("Iva5", "Iva5");
					sqlBulkCopy.ColumnMappings.Add("Exentas", "Exentas");
					sqlBulkCopy.ColumnMappings.Add("Total", "Total");

					sqlBulkCopy.WriteToServer(dtVentas);

					MessageBox.Show("oky doky");
				}
			}
			else
			{
				MessageBox.Show("Formato o Ventas No Valido. Compruebe y vuela a ingresar el Ventas!");
			}
		}
	}
	else
	{
		MessageBox.Show("No existe el Ventas!");
	}
}
catch (Exception ex)
{
	MessageBox.Show(ex.Message);
}

Comentarios desde Facebook:

Sin Comentarios aun, puedes tú ser el primero en comentar!

Deja tu Comentario

Responder