Saltar al pie de página
.NET AYUDA

Dapper C# (Cómo Funciona para Desarrolladores)

En el desarrollo de software moderno, acceder a bases de datos de manera eficiente es crucial para el rendimiento y escalabilidad de la aplicación. Dapper, un ligero Object-Relational Mapper (ORM) para .NET, ofrece un enfoque simplificado para la interacción con bases de datos. En este artículo, exploraremos cómo usar Dapper C# con un archivo de base de datos SQLite, demostrando su simplicidad y efectividad a través de ejemplos de código. Además, presentaré la notable biblioteca de generación de PDF llamada IronPDF de Iron Software.

¿Qué es Dapper?

Dapper es un marco de mapeo objeto-relacional (ORM) para la plataforma .NET. Es un mapeador de objetos sencillo que te permite mapear un modelo de dominio orientado a objetos a una base de datos relacional tradicional. Dapper es conocido por su velocidad y rendimiento, a menudo llamado el "Rey del Micro ORM". Igual a la velocidad de un lector de datos ADO.NET bruto y mejora la interfaz IDbConnection con métodos de extensión útiles para consultar bases de datos SQL.

Características principales de Dapper

  1. Rendimiento: Dapper es conocido por su excelente rendimiento debido a su diseño liviano y mapeo de objetos eficiente.
  2. Simplicidad: la API de Dapper es minimalista e intuitiva, lo que hace que sea fácil para los desarrolladores comprenderla y utilizarla de manera efectiva.
  3. Compatibilidad con SQL sin procesar: Dapper permite a los desarrolladores escribir consultas SQL sin procesar, lo que proporciona control total sobre las interacciones de la base de datos.
  4. Mapeo de objetos: Dapper mapea los resultados de consultas directamente a objetos C#, reduciendo el código repetitivo y mejorando la legibilidad del código.
  5. Consultas parametrizadas: Dapper admite consultas parametrizadas, lo que protege contra ataques de inyección SQL y mejora el rendimiento.
  6. Mapeo múltiple: Dapper maneja sin problemas relaciones de uno a muchos y de muchos a muchos, lo que permite ejecutar múltiples consultas de manera eficiente, simplificando así la recuperación de datos complejos.

Acceso asíncrono a datos con Dapper

Dapper ofrece métodos de extensión asincrónicos que reflejan sus contrapartes sincrónicas, permitiendo a los desarrolladores ejecutar consultas de bases de datos de manera asincrónica. Estos métodos asincrónicos son ideales para operaciones dependientes de E/S, como consultas a bases de datos, donde el hilo principal puede continuar ejecutando otras tareas mientras espera que se complete la operación de base de datos.

Métodos asíncronos clave en Dapper

  1. QueryAsync : ejecuta una consulta SQL de forma asincrónica y devuelve el resultado como una secuencia de objetos dinámicos u objetos fuertemente tipados.
  2. QueryFirstOrDefaultAsync : ejecuta una consulta SQL de forma asincrónica y devuelve el primer resultado o un valor predeterminado si no se encuentra ningún resultado.
  3. ExecuteAsync : ejecuta un comando SQL de forma asincrónica (por ejemplo, INSERT, UPDATE, DELETE) y devuelve el número de filas afectadas.

Configuración del entorno: Antes de adentrarse en los ejemplos de código, asegúrate de tener las herramientas necesarias instaladas:

  1. Visual Studio o Visual Studio Code.
  2. .NET SDK.
  3. Paquete SQLite para .NET.

Para instalar el paquete SQLite, ejecuta el siguiente comando en el directorio de tu proyecto:

dotnet add package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite
SHELL

Creando una base de datos SQLite: Para fines de demostración, vamos a crear un archivo de base de datos SQLite simple llamado "example.db" con una tabla "Users" que contiene columnas para "Id," "Name," y "Email."

CREATE TABLE Users (
    Id INTEGER PRIMARY KEY,
    Name TEXT,
    Email TEXT
);

Uso de Dapper con SQLite

  1. Primero, asegúrate de tener los espacios de nombres necesarios importados:
using Microsoft.Data.Sqlite;
using Dapper;
using Microsoft.Data.Sqlite;
using Dapper;
$vbLabelText   $csharpLabel
  1. Establece una conexión a la base de datos SQLite:

    string connectionString = "Data Source=example.db"; // SQLite database connection string
    using (var connection = new SqliteConnection(connectionString))
    {
        connection.Open();
        // Your Dapper queries will go here
    }
    string connectionString = "Data Source=example.db"; // SQLite database connection string
    using (var connection = new SqliteConnection(connectionString))
    {
        connection.Open();
        // Your Dapper queries will go here
    }
    $vbLabelText   $csharpLabel
  2. Ejecuta una consulta con Dapper:

    // Define a class to represent the structure of a user
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
    
    // Query to select all users
    string query = "SELECT * FROM Users"; // SQL query
    var users = connection.Query<User>(query).ToList();
    
    // Display the results
    foreach (var user in users)
    {
        Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Email: {user.Email}");
    }
    // Define a class to represent the structure of a user
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
    
    // Query to select all users
    string query = "SELECT * FROM Users"; // SQL query
    var users = connection.Query<User>(query).ToList();
    
    // Display the results
    foreach (var user in users)
    {
        Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Email: {user.Email}");
    }
    $vbLabelText   $csharpLabel
  3. Inserta datos en la base de datos usando Dapper:

    // Define a new user 
    var newUser = new User { Name = "John Doe", Email = "john@example.com" };
    
    // SQL query/stored procedure to insert a new user
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    
    // Execute the query
    connection.Execute(insertQuery, newUser);
    // Define a new user 
    var newUser = new User { Name = "John Doe", Email = "john@example.com" };
    
    // SQL query/stored procedure to insert a new user
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    
    // Execute the query
    connection.Execute(insertQuery, newUser);
    $vbLabelText   $csharpLabel

Presentando IronPDF

IronPDF es una biblioteca C# de Iron Software que permite a los desarrolladores crear, editar y manipular documentos PDF de manera programática dentro de aplicaciones .NET. Proporciona características como la generación de documentos PDF desde HTML, imágenes y otros formatos, así como la adición de texto, imágenes y varios elementos a archivos PDF existentes. IronPDF tiene como objetivo simplificar las tareas de generación y manipulación de PDF para los desarrolladores de .NET proporcionando un conjunto completo de herramientas y APIs.

IronPDF ofrece una variedad de características para la generación y manipulación de PDF dentro de aplicaciones .NET:

  1. Conversión de HTML a PDF: Convierta contenido HTML, incluidos estilos CSS, en documentos PDF.
  2. Conversión de imagen a PDF: Convierta imágenes (como JPEG, PNG, BMP) a documentos PDF.
  3. Conversión de texto a PDF: Convierta texto plano o texto con formato (RTF) a documentos PDF.
  4. Generación de PDF: Cree documentos PDF desde cero de manera programática.
  5. Edición de PDF: Edite documentos PDF existentes agregando o modificando texto, imágenes y otros elementos.
  6. Combinación y división de PDF: Combine múltiples documentos PDF en un solo documento, o divida un documento PDF en múltiples archivos.
  7. Seguridad de PDF: Aplique protección con contraseña y cifrado a los documentos PDF para restringir el acceso y proteger información sensible.
  8. Relleno de formularios PDF: Completa formularios PDF con datos de manera programática.
  9. Impresión de PDF: Imprime documentos PDF directamente desde tu aplicación .NET.
  10. Configuración de conversión de PDF: Personaliza varias configuraciones como el tamaño de página, orientación, márgenes, compresión y más durante la generación de PDF.
  11. Extracción de texto de PDF: Extrae contenido de texto de documentos PDF para su posterior procesamiento o análisis.
  12. Metadatos de PDF: Establezca metadatos (autor, título, asunto, palabras clave) para documentos PDF.

Generación de documentos PDF con IronPDF y Dapper

Crea una aplicación de consola en Visual Studio

Dapper C# (Cómo funciona para desarrolladores): Figura 1 - Creando una aplicación de consola en Visual Studio

Proporcione el nombre y la ubicación del proyecto

Dapper C# (Cómo funciona para desarrolladores): Figura 2 - Nombrando el proyecto

Seleccione versión de .NET

Dapper C# (Cómo funciona para desarrolladores): Figura 3 - Selecciona la versión de .NET deseada

Instale los siguientes paquetes ya sea desde el Administrador de Paquetes de Visual Studio o la consola

dotnet add package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite
SHELL

Dapper C# (Cómo funciona para desarrolladores): Figura 4 - Instalando Microsoft Data Sqlite desde el Administrador de Paquetes de Visual Studio

dotnet add package Dapper --version 2.1.35
dotnet add package Dapper --version 2.1.35
SHELL

Dapper C# (Cómo funciona para desarrolladores): Figura 5 - Instalando Dapper desde el Administrador de Paquetes de Visual Studio

dotnet add package IronPdf --version 2024.4.2
dotnet add package IronPdf --version 2024.4.2
SHELL

Dapper C# (Cómo funciona para desarrolladores): Figura 6 - Instalando IronPDF desde el Administrador de Paquetes de Visual Studio

Utiliza el siguiente código para generar un documento PDF:

using Dapper; // Import Dapper for ORM functionalities
using IronPdf; // Import IronPDF for PDF generation
using Microsoft.Data.Sqlite; // Import Sqlite for database connection

// Define the connection string for SQLite database
string connectionString = "Data Source=ironPdf.db";

// Create a string to hold the content for the PDF document
var content = "<h1>Demonstrate IronPDF with Dapper</h1>";

// Add HTML content
content += "<h2>Create a new database using Microsoft.Data.Sqlite</h2>";
content += "<p>new SqliteConnection(connectionString) and connection.Open()</p>";

// Open the database connection
using (var connection = new SqliteConnection(connectionString))
{
    connection.Open();

    // Create a Users Table using Dapper
    content += "<h2>Create a Users Table using Dapper and SQL insert query</h2>";
    content += "<p>CREATE TABLE IF NOT EXISTS Users</p>";

    // SQL statement to create a Users table
    string sql = "CREATE TABLE IF NOT EXISTS Users (\n    Id INTEGER PRIMARY KEY,\n    Name TEXT,\n    Email TEXT\n);";
    connection.Execute(sql);

    // Add Users to table using Dapper
    content += "<h2>Add Users to table using Dapper</h2>";
    content += AddUser(connection, new User { Name = "John Doe", Email = "john@example.com" });
    content += AddUser(connection, new User { Name = "Smith William", Email = "Smith@example.com" });
    content += AddUser(connection, new User { Name = "Rock Bill", Email = "Rock@example.com" });
    content += AddUser(connection, new User { Name = "Jack Sparrow", Email = "Jack@example.com" });
    content += AddUser(connection, new User { Name = "Tomus Tibe", Email = "Tomus@example.com" });

    // Retrieve and display users from database
    content += "<h2>Get Users From table using Dapper</h2>";
    string query = "SELECT * FROM Users";
    var users = connection.Query<User>(query).ToList();

    // Display each user detail retrieved from the database
    foreach (var user in users)
    {
        content += $"<p>Id:{user.Id}, Name:{user.Name}, email: {user.Email}</p>";
        Console.WriteLine($"{user.Id}. User Name:{user.Name}, Email:{user.Email}");
    }

    // Create PDF from the accumulated HTML content
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(content);

    // Save the PDF to a file
    pdf.SaveAs("dapper.pdf");
}

// Method to add user to the database and accumulate HTML content
string AddUser(SqliteConnection sqliteConnection, User user)
{
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    sqliteConnection.Execute(insertQuery, user);
    return $"<p>Name:{user.Name}, email: {user.Email}</p>"; 
}
using Dapper; // Import Dapper for ORM functionalities
using IronPdf; // Import IronPDF for PDF generation
using Microsoft.Data.Sqlite; // Import Sqlite for database connection

// Define the connection string for SQLite database
string connectionString = "Data Source=ironPdf.db";

// Create a string to hold the content for the PDF document
var content = "<h1>Demonstrate IronPDF with Dapper</h1>";

// Add HTML content
content += "<h2>Create a new database using Microsoft.Data.Sqlite</h2>";
content += "<p>new SqliteConnection(connectionString) and connection.Open()</p>";

// Open the database connection
using (var connection = new SqliteConnection(connectionString))
{
    connection.Open();

    // Create a Users Table using Dapper
    content += "<h2>Create a Users Table using Dapper and SQL insert query</h2>";
    content += "<p>CREATE TABLE IF NOT EXISTS Users</p>";

    // SQL statement to create a Users table
    string sql = "CREATE TABLE IF NOT EXISTS Users (\n    Id INTEGER PRIMARY KEY,\n    Name TEXT,\n    Email TEXT\n);";
    connection.Execute(sql);

    // Add Users to table using Dapper
    content += "<h2>Add Users to table using Dapper</h2>";
    content += AddUser(connection, new User { Name = "John Doe", Email = "john@example.com" });
    content += AddUser(connection, new User { Name = "Smith William", Email = "Smith@example.com" });
    content += AddUser(connection, new User { Name = "Rock Bill", Email = "Rock@example.com" });
    content += AddUser(connection, new User { Name = "Jack Sparrow", Email = "Jack@example.com" });
    content += AddUser(connection, new User { Name = "Tomus Tibe", Email = "Tomus@example.com" });

    // Retrieve and display users from database
    content += "<h2>Get Users From table using Dapper</h2>";
    string query = "SELECT * FROM Users";
    var users = connection.Query<User>(query).ToList();

    // Display each user detail retrieved from the database
    foreach (var user in users)
    {
        content += $"<p>Id:{user.Id}, Name:{user.Name}, email: {user.Email}</p>";
        Console.WriteLine($"{user.Id}. User Name:{user.Name}, Email:{user.Email}");
    }

    // Create PDF from the accumulated HTML content
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(content);

    // Save the PDF to a file
    pdf.SaveAs("dapper.pdf");
}

// Method to add user to the database and accumulate HTML content
string AddUser(SqliteConnection sqliteConnection, User user)
{
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    sqliteConnection.Execute(insertQuery, user);
    return $"<p>Name:{user.Name}, email: {user.Email}</p>"; 
}
$vbLabelText   $csharpLabel

Explicación del código

  1. Comienza creando un contenedor de contenido de cadena para la generación de PDF.
  2. Crea una nueva base de datos usando Microsoft.Data.Sqlite, connection.Open() creará una base de datos vacía.
  3. Crea una tabla Users usando Dapper y ejecuta consultas SQL para la inserción.
  4. Añade usuarios a la tabla usando Dapper con consultas de inserción.
  5. Consulta para seleccionar todos los usuarios de la base de datos.
  6. Guarda el contenido generado como un PDF usando los métodos ChromePdfRenderer y SaveAs proporcionados por IronPDF.

Resultado

Dapper C# (Cómo funciona para desarrolladores): Figura 7 - Salida de PDF de ejemplo utilizando todos los paquetes instalados anteriormente

Licencia (prueba disponible para IronPDF)

La información de licencias de IronPDF está disponible para garantizar el cumplimiento y uso dentro de tu proyecto.

Se puede obtener una licencia de prueba para desarrolladores a través de la página de licencia de prueba de IronPDF.

Por favor, reemplaza la clave en el archivo appSettings.json mostrado a continuación:

{
  "IronPdf.License.LicenseKey" : "The Key Goes Here"
}

Conclusión

Dapper simplifica el acceso a datos en aplicaciones .NET, y cuando se combina con SQLite, proporciona una solución ligera y eficiente para gestionar bases de datos. Siguiendo los pasos descritos en este artículo, puedes aprovechar Dapper para interactuar con bases de datos SQLite sin problemas, lo que te permite construir aplicaciones robustas y escalables con facilidad. Junto con IronPDF, los desarrolladores pueden adquirir habilidades relacionadas con bases de datos ORM como Dapper y bibliotecas de generación de PDF como IronPDF.

Preguntas Frecuentes

¿Qué es Dapper en C#?

Dapper es un framework de mapeo objeto-relacional (ORM) para la plataforma .NET, conocido por su velocidad y rendimiento. Permite a los desarrolladores mapear un modelo de dominio orientado a objetos a una base de datos relacional tradicional.

¿Cómo mejora Dapper el rendimiento en las operaciones de base de datos?

Dapper mejora el rendimiento por ser ligero y mapear objetos de manera eficiente. Igual a la velocidad de un lector de datos ADO.NET en bruto y mejora la interfaz IDbConnection con métodos de extensión útiles para consultar bases de datos SQL.

¿Cómo puedo realizar acceso a datos asincrónico con Dapper?

Dapper ofrece métodos de extensión asincrónicos como QueryAsync, QueryFirstOrDefaultAsync y ExecuteAsync, que permiten a los desarrolladores ejecutar consultas de base de datos de manera asincrónica, ideal para operaciones dependientes de E/S.

¿Cómo integro la generación de PDF en una aplicación .NET?

Puedes integrar la generación de PDF en una aplicación .NET usando IronPDF. Permite la creación, edición y manipulación de documentos PDF de manera programática, incluyendo la conversión de HTML, imágenes y texto en PDFs, y la edición de PDFs existentes.

¿Cómo configuro el entorno para usar Dapper con SQLite?

Para configurar el entorno, necesitas Visual Studio o Visual Studio Code, .NET SDK y el paquete SQLite para .NET. Puedes instalar estos paquetes usando la CLI de dotnet.

¿Cómo generar un informe PDF de resultados de base de datos?

Usa IronPDF para generar un informe PDF a partir de los resultados de una consulta de base de datos primero recuperando los datos con Dapper y luego formateando la salida como un PDF usando las funcionalidades de IronPDF.

¿Cómo creo y consulto una base de datos SQLite usando Dapper en C#?

Crea una base de datos SQLite estableciendo una conexión con SqliteConnection y ejecutando consultas SQL usando el método Execute de Dapper. Puedes consultar la base de datos usando el método Query de Dapper para recuperar datos de manera eficiente.

¿Puede Dapper manejar relaciones de datos complejas?

Sí, Dapper puede manejar relaciones de uno a muchos y de muchos a muchos usando sus capacidades de mapeo múltiple, lo que simplifica la recuperación de datos complejos.

¿Cuáles son las ventajas de usar una biblioteca de generación de PDF en .NET?

Una biblioteca de generación de PDF como IronPDF mejora las aplicaciones .NET al permitir la generación y manipulación de PDF de manera fluida, ofreciendo características como conversión de HTML a PDF, edición de PDF, fusión, división y funciones de seguridad.

¿Cómo obtengo una licencia de prueba para IronPDF?

Una licencia de prueba para IronPDF se puede obtener a través de la página de licencia de prueba de IronPDF. La clave de licencia necesita ser incluida en la configuración de tu proyecto.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más