Cómo leer datos de un archivo CSV y almacenarlos en la base de datos C#
En el mundo digital de hoy, manejar datos de manera eficiente es una tarea importante. Un requisito común en el desarrollo de software es leer datos de un archivo CSV y almacenarlos en una base de datos. Este tutorial cubre los pasos para leer datos de un archivo CSV y almacenarlos en una base de datos SQL Server usando C#, utilizando específicamente la biblioteca IronXL. Esta guía está diseñada para principiantes y se explicará de una manera simple y atractiva.
Entendiendo los conceptos básicos
¿Qué es un archivo CSV?
Un archivo CSV (Valores Separados por Comas) es un archivo de texto sin formato que contiene datos separados por comas. Es un formato popular para transferir datos debido a su simplicidad y compatibilidad con varias aplicaciones, como Excel.
El papel de SQL Server y las bases de datos
SQL Server es un sistema de gestión de bases de datos de Microsoft. Se utiliza para almacenar y gestionar datos de manera estructurada. En nuestro caso, almacenaremos los datos CSV en una tabla de SQL Server.
Introducción a IronXL
IronXL es una biblioteca de Excel diseñada para aplicaciones .NET, específicamente creada para permitir a los desarrolladores leer, generar y editar archivos de Excel sin necesidad del Microsoft Office Interop. Esta biblioteca destaca por su compatibilidad con varias versiones y plataformas de .NET, incluyendo .NET Core, .NET Standard y .NET Framework, así como su soporte para diferentes sistemas operativos como Windows, Linux y macOS. Es una biblioteca poderosa para importar datos, especialmente para manejar archivos CSV.
Cómo leer y almacenar datos de archivos CSV en C
- Crear un programa de consola C# en Visual Studio.
- Instalar la biblioteca CSV utilizando el Administrador de Paquetes NuGet.
- Cargar el archivo CSV en el programa utilizando la biblioteca.
- Crear una conexión con la base de datos.
- Leer el contenido del archivo CSV utilizando la biblioteca.
- Copiar ese contenido en la base de datos usando el método
SqlBulkCopy.
Aquí tienes un fragmento de código de ejemplo:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using CsvHelper;
namespace CsvReader
{
class Program
{
static void Main(string[] args)
{
string csvPath = @"path\to\your\csv\file.csv";
using (var reader = new StreamReader(csvPath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
// Mapping the CSV data to the corresponding model
var records = csv.GetRecords<YourModel>();
using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
{
sqlBulkCopy.DestinationTableName = "YourTableName";
sqlBulkCopy.WriteToServer(records.AsDataReader());
}
Console.WriteLine("Data imported successfully!");
}
}
}
// Define your model that maps to the CSV columns
public class YourModel
{
// Define properties here representing the CSV columns
}
}using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using CsvHelper;
namespace CsvReader
{
class Program
{
static void Main(string[] args)
{
string csvPath = @"path\to\your\csv\file.csv";
using (var reader = new StreamReader(csvPath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
// Mapping the CSV data to the corresponding model
var records = csv.GetRecords<YourModel>();
using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
{
sqlBulkCopy.DestinationTableName = "YourTableName";
sqlBulkCopy.WriteToServer(records.AsDataReader());
}
Console.WriteLine("Data imported successfully!");
}
}
}
// Define your model that maps to the CSV columns
public class YourModel
{
// Define properties here representing the CSV columns
}
}Asegúrate de reemplazar "ruta\a\tu\archivo\csv.csv" con la ruta real a tu archivo CSV, YourModel con el modelo que representa tus datos CSV, "tu_cadena_de_conexión" con la cadena de conexión de tu base de datos y "YourTableName" con el nombre de tu tabla de base de datos.
Configuración del entorno
Prerrequisitos
- Visual Studio: asegúrese de tener instalado Visual Studio.
- SQL Server: debe tener SQL Server instalado y accesible.
- Instalación de IronXL: Instale IronXL ejecutando el siguiente comando NuGet:
dotnet add package IronXL
Asegúrate de ejecutar estos comandos dentro del directorio del proyecto donde deseas instalar IronXL.
Creación de una tabla de SQL Server
Antes de importar datos, crea una tabla de destino en tu base de datos SQL Server. Esta tabla almacenará los datos del CSV.
CREATE TABLE YourTableName (
Column1 DataType,
Column2 DataType,
...
);Reemplaza YourTableName, Column1, Column2 y DataType con tus detalles específicos.
Guía paso a paso para importar datos CSV
- Primero, asegúrate de tener un archivo CSV que contenga los datos que deseas importar.
- Crea un nuevo proyecto de aplicación de consola C# en Visual Studio.
Instala el paquete NuGet CsvHelper para leer archivos CSV. Puedes hacerlo abriendo la Consola del Administrador de Paquetes NuGet en Visual Studio y ejecutando el siguiente comando:
Install-Package CsvHelperInstall-Package CsvHelperSHELLAgrega las declaraciones using necesarias en la parte superior de tu archivo de código C#:
using System; using System.IO; using System.Globalization; using CsvHelper; using System.Data.SqlClient;using System; using System.IO; using System.Globalization; using CsvHelper; using System.Data.SqlClient;$vbLabelText $csharpLabelEn tu código, especifica la ruta de tu archivo CSV. Por ejemplo:
string csvFilePath = @"C:\path\to\your\csv\file.csv";string csvFilePath = @"C:\path\to\your\csv\file.csv";$vbLabelText $csharpLabelAsegúrate de reemplazar
C:\ruta\a\tu\archivo\csv.csvcon la ruta real a tu archivo CSV.Crea una nueva instancia de la clase
StreamReaderpara leer el archivo CSV:using (var reader = new StreamReader(csvFilePath)) { // code goes here }using (var reader = new StreamReader(csvFilePath)) { // code goes here }$vbLabelText $csharpLabelCrea una nueva instancia de la clase
CsvReader, pasando el objetoStreamReader:using (var reader = new StreamReader(csvFilePath)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { // code goes here }using (var reader = new StreamReader(csvFilePath)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { // code goes here }$vbLabelText $csharpLabelOpcionalmente, configura el objeto
CsvReadercon cualquier configuración necesaria. Por ejemplo:csv.Configuration.HasHeaderRecord = true;csv.Configuration.HasHeaderRecord = true;$vbLabelText $csharpLabelUsa el método
GetRecords()del objetoCsvReaderpara leer los datos del CSV en una colección de objetos. Reemplaza `` con el tipo de objeto que representa cada registro en el archivo CSV. Por ejemplo:var records = csv.GetRecords<YourModel>();var records = csv.GetRecords<YourModel>();$vbLabelText $csharpLabelAsegúrate de reemplazar
YourModelcon el nombre real de tu clase modelo.Itera sobre los registros y realiza cualquier procesamiento o validación requerida:
foreach (var record in records) { // Process each record as needed }foreach (var record in records) { // Process each record as needed }$vbLabelText $csharpLabel- Opcionalmente, establece una conexión a tu base de datos SQL Server utilizando ADO.NET o una herramienta ORM como Entity Framework.
- Inserta cada registro en la base de datos utilizando el mecanismo de acceso a la base de datos que hayas elegido. Por ejemplo, si estás utilizando ADO.NET, puedes aprovechar la clase
SqlBulkCopypara insertar los datos en bloque de manera eficiente. - Maneja cualquier excepción que pueda ocurrir durante el proceso de importación y proporciona mensajes de error o registros apropiados.
- Prueba tu aplicación ejecutándola y verifica que los datos del CSV se hayan importado exitosamente en tu base de datos.
using IronPdf; Ahora has importado exitosamente datos CSV en tu base de datos SQL Server utilizando C#.
Paso 1: Lectura del archivo CSV
Al comenzar la tarea de importar datos de un archivo CSV, el primer paso crucial es leer los datos dentro del mismo con precisión. Cada línea en un archivo CSV típicamente representa un registro de datos, y cada registro consta de uno o más campos, separados por comas.
Luego empleamos la biblioteca IronXL para manejar el archivo CSV. Para leer el archivo CSV usando IronXL, se utilizarán sus clases WorkBook y WorkSheet. La clase WorkBook representa una hoja de cálculo completa, que podría ser un archivo de Excel o, en nuestro caso, un archivo CSV. Cuando cargas la ruta del archivo CSV en un objeto WorkBook, IronXL trata el archivo CSV como una hoja de cálculo/tabla de datos.
using IronXL;
using System.Data;
public class CSVReader
{
// Reads a CSV file and converts it to a DataTable
public DataTable ReadCSV(string filePath)
{
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert to DataTable for easier processing
DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
return dataTable;
}
}using IronXL;
using System.Data;
public class CSVReader
{
// Reads a CSV file and converts it to a DataTable
public DataTable ReadCSV(string filePath)
{
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert to DataTable for easier processing
DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
return dataTable;
}
}Paso 2: Establecer una conexión a la base de datos
Establecer una conexión a tu base de datos SQL Server es un paso fundamental en el proceso de almacenar tus datos CSV. Este paso implica configurar un enlace de comunicación entre tu aplicación y el servidor de base de datos. Una conexión exitosa es crucial porque, sin ella, transferir datos a la base de datos sería imposible.
Este paso se centra en crear y abrir una conexión utilizando una cadena de conexión en C#. La cadena de conexión es un componente vital ya que contiene la información necesaria para establecer la conexión. Es como una llave que abre la puerta a tu base de datos.
using System.Data.SqlClient;
public class DatabaseConnector
{
// Connection string to connect to the database
private string connectionString = "your_connection_string_here";
public SqlConnection ConnectToDatabase()
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
}using System.Data.SqlClient;
public class DatabaseConnector
{
// Connection string to connect to the database
private string connectionString = "your_connection_string_here";
public SqlConnection ConnectToDatabase()
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
}La variable connectionString contiene todos los detalles necesarios para conectar a tu SQL Server. Típicamente incluye el nombre del servidor, el nombre de la base de datos, el ID de usuario y la contraseña. Un ejemplo de cadena de conexión es: Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;. Es esencial reemplazar estos marcadores de posición con los detalles de tu servidor real.
Paso 3: Almacenamiento de datos en la base de datos
Habiendo establecido una conexión con la base de datos SQL Server, el siguiente paso crítico es almacenar los datos CSV en la base de datos. Este paso involucra transferir los datos que has leído y procesado a tu tabla de SQL Server. Es una parte crucial del proceso de manejo de datos, ya que involucra la migración de datos reales de un archivo local a un servidor de base de datos.
En este paso, nos enfocaremos en cómo los datos CSV, ahora almacenados en un DataTable, se transfieren a la base de datos SQL Server. Usamos una combinación de características de C# y SQL Server para lograr esta tarea de manera eficiente.
using System;
using System.Data;
using System.Data.SqlClient;
public class DataImporter
{
public void ImportData(DataTable dataTable)
{
using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
{
// Check if the table exists and create it if it does not.
string tableName = "CSVData"; // Use a valid SQL table name format
string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
string createTable = "CREATE TABLE " + tableName + " (";
for (int i = 0; i < dataTable.Columns.Count; i++)
{
createTable += $"[{dataTable.Columns[i].ColumnName}] NVARCHAR(MAX)";
if (i < dataTable.Columns.Count - 1)
createTable += ", ";
}
createTable += ") END";
SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
createTableCommand.ExecuteNonQuery();
// Now we use SqlBulkCopy to import the data
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = tableName;
try
{
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Data imported successfully!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}using System;
using System.Data;
using System.Data.SqlClient;
public class DataImporter
{
public void ImportData(DataTable dataTable)
{
using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
{
// Check if the table exists and create it if it does not.
string tableName = "CSVData"; // Use a valid SQL table name format
string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
string createTable = "CREATE TABLE " + tableName + " (";
for (int i = 0; i < dataTable.Columns.Count; i++)
{
createTable += $"[{dataTable.Columns[i].ColumnName}] NVARCHAR(MAX)";
if (i < dataTable.Columns.Count - 1)
createTable += ", ";
}
createTable += ") END";
SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
createTableCommand.ExecuteNonQuery();
// Now we use SqlBulkCopy to import the data
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = tableName;
try
{
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Data imported successfully!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}Comienza abriendo una conexión a la base de datos SQL Server utilizando la clase DatabaseConnector, asegurando un camino para las transacciones de datos. El método verifica la existencia de la tabla llamada "CSVData" dentro de la base de datos.
Si la tabla no se encuentra, procede a crearla. El esquema de la tabla se construye en base al esquema del DataTable pasado al método, con todas las columnas configuradas como NVARCHAR(MAX) para acomodar cualquier dato de texto. Este es un enfoque genérico y puede necesitar refinamiento para ajustar más de cerca los tipos de datos específicos.
Después de eso, se formula y ejecuta un comando SQL para verificar la existencia de la tabla o para crearla. Esto asegura que la operación de copiado en bloque subsiguiente tenga una tabla de destino lista para la inserción de datos. Con la tabla lista, se emplea la clase SqlBulkCopy para transferir datos desde el DataTable directamente a la tabla SQL Server. Esta operación está diseñada para transferencias de datos en bloque de alto rendimiento, lo que la hace adecuada para manejar grandes volúmenes de datos de manera eficiente.
Paso 4: Poniéndolo todo junto
Después de trabajar diligentemente en los pasos anteriores de leer datos CSV, establecer una conexión a la base de datos y prepararse para transferir los datos, llegamos a la etapa final y crucial: integrar estos componentes individuales en un proceso cohesivo.
Esta integración se realiza en el método Main de tu aplicación C#, donde todo se une, permitiendo la ejecución real de la importación de datos del archivo CSV a la base de datos SQL Server.
class Program
{
static void Main(string[] args)
{
string filePath = "path_to_your_csv_file.csv";
CSVReader reader = new CSVReader();
DataTable dataTable = reader.ReadCSV(filePath);
DataImporter importer = new DataImporter();
importer.ImportData(dataTable);
Console.WriteLine("Data imported successfully!");
}
}class Program
{
static void Main(string[] args)
{
string filePath = "path_to_your_csv_file.csv";
CSVReader reader = new CSVReader();
DataTable dataTable = reader.ReadCSV(filePath);
DataImporter importer = new DataImporter();
importer.ImportData(dataTable);
Console.WriteLine("Data imported successfully!");
}
}Reemplazar path_to_your_csv_file.csv con la ruta a tu archivo CSV.
Ejecución del proyecto
Una vez que ejecutes el proyecto, verás el siguiente resultado. Los mensajes de éxito representan que todas las operaciones se han ejecutado correctamente y los datos se han copiado a la base de datos.
Data imported successfully!Ahora, puedes abrir SQL Server Management Studio (SSMS) y verificar la tabla en la base de datos. Verás los siguientes datos en la tabla.

Conclusión
Este tutorial te ha guiado a través del proceso de leer datos de un archivo CSV y almacenarlos en una base de datos SQL Server usando C#. Al seguir estos pasos y utilizar la biblioteca IronXL, puedes gestionar eficazmente los datos CSV en tus aplicaciones C#.
IronXL ofrece una prueba gratuita para que los usuarios experimenten sus características antes de comprometerse con una compra. Esta prueba completamente funcional permite a los usuarios potenciales probar y evaluar el producto en un entorno en vivo sin marcas de agua en la producción. Después del período de prueba, si decides continuar usando IronXL para tus proyectos, la licencia del producto comienza desde $799.
Preguntas Frecuentes
¿Cómo puedo leer datos de un archivo CSV en C#?
Puedes leer datos de un archivo CSV en C# usando la biblioteca IronXL. IronXL proporciona clases `WorkBook` y `WorkSheet` que te permiten cargar y manipular archivos CSV como si fueran hojas de cálculo de Excel.
¿Cuáles son los pasos para almacenar datos CSV en una base de datos SQL Server usando C#?
Para almacenar datos CSV en una base de datos SQL Server usando C#, primero lee el CSV usando IronXL, luego carga los datos en un `DataTable` y usa `SqlBulkCopy` para insertar eficientemente los datos en una tabla SQL Server.
¿Cómo instalo IronXL para usarlo en mi proyecto C#?
Puedes instalar IronXL en tu proyecto C# usando el Administrador de paquetes NuGet en Visual Studio. Busca 'IronXL' en el Administrador de paquetes NuGet y agrégalo a tu proyecto.
¿Cuál es la principal ventaja de usar IronXL para manejar archivos CSV en C#?
La principal ventaja de usar IronXL para manejar archivos CSV en C# es su capacidad para gestionar y manipular sin problemas archivos CSV y Excel dentro de aplicaciones .NET, ofreciendo compatibilidad entre varias versiones de .NET y sistemas operativos.
¿Puedo usar IronXL para manejar archivos Excel así como también archivos CSV?
Sí, IronXL está diseñado para manejar tanto archivos Excel como CSV, lo que lo convierte en una herramienta versátil para gestionar datos de hojas de cálculo dentro de aplicaciones .NET.
¿Qué debo hacer si encuentro errores al usar IronXL para leer archivos CSV?
Si encuentras errores al usar IronXL para leer archivos CSV, asegúrate de que el archivo CSV esté correctamente formateado y que IronXL esté correctamente instalado en tu proyecto. Puedes consultar la documentación de IronXL para obtener consejos de solución de problemas.
¿Cómo puedo probar la funcionalidad de IronXL antes de comprometerme a una compra?
IronXL ofrece una prueba gratuita completamente funcional, que te permite probar y evaluar el producto sin restricciones en un entorno de producción.
¿Cuáles son los requisitos previos para usar IronXL para almacenar datos CSV en una base de datos?
Los requisitos previos incluyen tener Visual Studio instalado, acceso a SQL Server e IronXL instalado a través de NuGet. También necesitas configurar una tabla SQL Server para almacenar los datos CSV.







