Elegante C# (Como funciona para desenvolvedores)
No desenvolvimento de software moderno, o acesso eficiente a bancos de dados é crucial para o desempenho e a escalabilidade das aplicações. O Dapper , um mapeador objeto-relacional (ORM) leve for .NET, oferece uma abordagem simplificada para interação com bancos de dados. Neste artigo, exploraremos como usar o Dapper C# com um arquivo de banco de dados SQLite, demonstrando sua simplicidade e eficácia por meio de exemplos de código. Além disso, apresentarei a notável biblioteca de geração de PDF chamada IronPDF , da Iron Software .
O que é Dapper?
Dapper é um framework de mapeamento objeto-relacional (ORM) para a plataforma .NET . É um mapeador de objetos simples que permite mapear um modelo de domínio orientado a objetos para um banco de dados relacional tradicional. O Dapper é conhecido por sua velocidade e desempenho, sendo frequentemente chamado de "Rei dos Micro ORMs". Ele iguala a velocidade de um leitor de dados .NET puro e aprimora a interface IDbConnection com métodos de extensão úteis para consultar bancos de dados SQL.
Principais características do Dapper
- Desempenho: O Dapper é conhecido por seu excelente desempenho devido ao seu design leve e mapeamento de objetos eficiente.
- Simplicidade: A API do Dapper é minimalista e intuitiva, facilitando o seu entendimento e utilização eficaz por parte dos desenvolvedores.
- Suporte a SQL puro: O Dapper permite que os desenvolvedores escrevam consultas SQL puras, proporcionando controle total sobre as interações com o banco de dados.
- Mapeamento de objetos: O Dapper mapeia os resultados da consulta diretamente para objetos C#, reduzindo o código repetitivo e melhorando a legibilidade do código.
- Consultas parametrizadas: O Dapper suporta consultas parametrizadas, protegendo contra ataques de injeção de SQL e melhorando o desempenho.
- Mapeamento múltiplo: O Dapper lida perfeitamente com relacionamentos um-para-muitos e muitos-para-muitos, permitindo que várias consultas sejam executadas de forma eficiente, simplificando assim a recuperação de dados complexos.
Acesso assíncrono a dados com Dapper
O Dapper oferece métodos de extensão assíncronos que espelham suas contrapartes síncronas, permitindo que os desenvolvedores executem consultas de banco de dados de forma assíncrona. Esses métodos assíncronos são ideais para operações com uso intensivo de E/S, como consultas a bancos de dados, em que o thread principal pode continuar executando outras tarefas enquanto aguarda a conclusão da operação no banco de dados.
Principais métodos assíncronos em Dapper
QueryAsync: Executa uma consulta SQL de forma assíncrona e retorna o resultado como uma sequência de objetos dinâmicos ou objetos fortemente tipados.QueryFirstOrDefaultAsync: Executa uma consulta SQL de forma assíncrona e retorna o primeiro resultado ou um valor padrão se nenhum resultado for encontrado.ExecuteAsync: Executa um comando SQL de forma assíncrona (por exemplo, INSERT, UPDATE, DELETE) e retorna o número de linhas afetadas.
Preparando o ambiente: Antes de analisar os exemplos de código, certifique-se de ter as ferramentas necessárias instaladas:
- Visual Studio ou Visual Studio Code.
- SDK .NET .
- Pacote SQLite for .NET.
Para instalar o pacote SQLite, execute o seguinte comando no diretório do seu projeto:
dotnet add package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite
Criando um banco de dados SQLite: Para fins de demonstração, vamos criar um arquivo de banco de dados SQLite simples chamado "example.db" com uma tabela "Users" contendo colunas para "Id", "Name" e "Email".
CREATE TABLE Users (
Id INTEGER PRIMARY KEY,
Name TEXT,
Email TEXT
);
Utilizando Dapper com SQLite
- Primeiro, certifique-se de ter importado os namespaces necessários:
using Microsoft.Data.Sqlite;
using Dapper;
using Microsoft.Data.Sqlite;
using Dapper;
Imports Microsoft.Data.Sqlite
Imports Dapper
-
Estabeleça uma conexão com o banco de dados 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 }Dim connectionString As String = "Data Source=example.db" ' SQLite database connection string Using connection = New SqliteConnection(connectionString) connection.Open() ' Your Dapper queries will go here End Using$vbLabelText $csharpLabel -
Execute uma consulta com o 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}"); }' Define a class to represent the structure of a user Public Class User Public Property Id() As Integer Public Property Name() As String Public Property Email() As String End Class ' Query to select all users Private query As String = "SELECT * FROM Users" ' SQL query Private users = connection.Query(Of User)(query).ToList() ' Display the results For Each user In users Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Email: {user.Email}") Next user$vbLabelText $csharpLabel -
Insira dados no banco de dados usando o 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);' Define a new user Dim newUser = New User With { .Name = "John Doe", .Email = "john@example.com" } ' SQL query/stored procedure to insert a new user Dim insertQuery As String = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)" ' Execute the query connection.Execute(insertQuery, newUser)$vbLabelText $csharpLabel
Apresentando o IronPDF
IronPDF é uma biblioteca C# da Iron Software que permite aos desenvolvedores criar, editar e manipular documentos PDF programaticamente em aplicações .NET . Oferece funcionalidades como gerar documentos PDF a partir de HTML, imagens e outros formatos, além de adicionar texto, imagens e diversos elementos a arquivos PDF existentes. O IronPDF visa simplificar as tarefas de geração e manipulação de PDFs para desenvolvedores .NET , fornecendo um conjunto abrangente de ferramentas e APIs.
O IronPDF oferece uma gama de recursos para geração e manipulação de PDFs em aplicações .NET :
- Conversão de HTML para PDF: Converta conteúdo HTML, incluindo estilos CSS, em documentos PDF.
- Conversão de imagem para PDF: Converta imagens (como JPEG, PNG, BMP) em documentos PDF.
- Conversão de texto para PDF: Converta texto simples ou texto formatado (RTF) em documentos PDF.
- Geração de PDF: Crie documentos PDF do zero programaticamente.
- Edição de PDF: Edite documentos PDF existentes adicionando ou modificando texto, imagens e outros elementos.
- Fusão e divisão de PDFs: Combine vários documentos PDF em um único documento ou divida um documento PDF em vários arquivos.
- Segurança de PDF: Aplique proteção por senha e criptografia a documentos PDF para restringir o acesso e proteger informações confidenciais.
- Preenchimento de formulários em PDF: Preencha formulários em PDF com dados de forma programática.
- Impressão de PDF: Imprima documentos PDF diretamente do seu aplicativo .NET .
- Configurações de conversão para PDF: Personalize diversas configurações, como tamanho da página, orientação, margens, compressão e muito mais durante a geração do PDF.
- Extração de texto de PDF: Extrai o conteúdo de texto de documentos PDF para posterior processamento ou análise.
- Metadados de PDF: Defina os metadados (autor, título, assunto, palavras-chave) para documentos PDF.
Gerando documentos PDF com IronPDF e Dapper
Crie um aplicativo de console no Visual Studio.

Forneça o nome e a localização do projeto.

Selecione a versão do .NET

Instale os seguintes pacotes usando o Gerenciador de Pacotes do Visual Studio ou o console.
dotnet add package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite

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

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

Utilize o código abaixo para gerar um 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>";
}
Imports Microsoft.VisualBasic
Imports Dapper ' Import Dapper for ORM functionalities
Imports IronPdf ' Import IronPDF for PDF generation
Imports Microsoft.Data.Sqlite ' Import Sqlite for database connection
' Define the connection string for SQLite database
Private connectionString As String = "Data Source=ironPdf.db"
' Create a string to hold the content for the PDF document
Private content = "<h1>Demonstrate IronPDF with Dapper</h1>"
' Add HTML content
Private content &= "<h2>Create a new database using Microsoft.Data.Sqlite</h2>"
Private content &= "<p>new SqliteConnection(connectionString) and connection.Open()</p>"
' Open the database connection
Using 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
Dim sql As String = "CREATE TABLE IF NOT EXISTS Users (" & vbLf & " Id INTEGER PRIMARY KEY," & vbLf & " Name TEXT," & vbLf & " Email TEXT" & vbLf & ");"
connection.Execute(sql)
' Add Users to table using Dapper
content &= "<h2>Add Users to table using Dapper</h2>"
content += AddUser(connection, New User With {
.Name = "John Doe",
.Email = "john@example.com"
})
content += AddUser(connection, New User With {
.Name = "Smith William",
.Email = "Smith@example.com"
})
content += AddUser(connection, New User With {
.Name = "Rock Bill",
.Email = "Rock@example.com"
})
content += AddUser(connection, New User With {
.Name = "Jack Sparrow",
.Email = "Jack@example.com"
})
content += AddUser(connection, New User With {
.Name = "Tomus Tibe",
.Email = "Tomus@example.com"
})
' Retrieve and display users from database
content &= "<h2>Get Users From table using Dapper</h2>"
Dim query As String = "SELECT * FROM Users"
Dim users = connection.Query(Of User)(query).ToList()
' Display each user detail retrieved from the database
For Each 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}")
Next user
' Create PDF from the accumulated HTML content
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(content)
' Save the PDF to a file
pdf.SaveAs("dapper.pdf")
End Using
' Method to add user to the database and accumulate HTML content
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'string AddUser(SqliteConnection sqliteConnection, User user)
'{
' string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
' sqliteConnection.Execute(insertQuery, user);
' Return string.Format("<p>Name:{0}, email: {1}</p>", user.Name, user.Email);
'}
Explicação do código
- Comece criando um contêiner de conteúdo de texto para geração de PDF.
- Crie um novo banco de dados usando
Microsoft.Data.Sqlite,connection.Open()criará um banco de dados vazio. - Crie uma tabela
Usersusando o Dapper e execute consultas SQL para inserção. - Adicione usuários à tabela usando Dapper com consultas de inserção.
- Consulta para selecionar todos os usuários do banco de dados.
- Salve o conteúdo gerado como um PDF usando os métodos
ChromePdfRenderereSaveAsfornecidos pelo IronPDF.
Saída

Licença (Versão de avaliação disponível para IronPDF)
As informações de licenciamento do IronPDF estão disponíveis para garantir a conformidade e o uso correto dentro do seu projeto.
Uma licença de avaliação para desenvolvedores pode ser obtida através da página de licença de avaliação do IronPDF .
Substitua a chave no arquivo appSettings.json mostrado abaixo:
{
"IronPdf.License.LicenseKey" : "The Key Goes Here"
}
Conclusão
O Dapper simplifica o acesso a dados em aplicações .NET e, quando combinado com o SQLite, oferece uma solução leve e eficiente para o gerenciamento de bancos de dados. Seguindo os passos descritos neste artigo, você poderá usar o Dapper para interagir com bancos de dados SQLite de forma integrada, permitindo criar aplicações robustas e escaláveis com facilidade. Juntamente com o IronPDF, os desenvolvedores podem adquirir habilidades relacionadas a bancos de dados ORM, como o Dapper, e bibliotecas de geração de PDF, como o IronPDF.
Perguntas frequentes
O que é Dapper em C#?
O Dapper é um framework de mapeamento objeto-relacional (ORM) para a plataforma .NET, conhecido por sua velocidade e desempenho. Ele permite que os desenvolvedores mapeiem um modelo de domínio orientado a objetos para um banco de dados relacional tradicional.
Como o Dapper melhora o desempenho nas operações de banco de dados?
O Dapper melhora o desempenho por ser leve e mapear objetos de forma eficiente. Ele iguala a velocidade de um leitor de dados ADO.NET puro e aprimora a interface IDbConnection com métodos de extensão úteis para consultar bancos de dados SQL.
Como posso realizar acesso assíncrono a dados com Dapper?
O Dapper oferece métodos de extensão assíncronos como QueryAsync , QueryFirstOrDefaultAsync e ExecuteAsync , que permitem aos desenvolvedores executar consultas de banco de dados de forma assíncrona, ideal para operações com uso intensivo de E/S.
Como faço para integrar a geração de PDFs em uma aplicação .NET?
Você pode integrar a geração de PDFs em um aplicativo .NET usando o IronPDF. Ele permite a criação, edição e manipulação programática de documentos PDF, incluindo a conversão de HTML, imagens e texto em PDFs, além da edição de PDFs existentes.
Como configuro o ambiente para usar o Dapper com o SQLite?
Para configurar o ambiente, você precisa do Visual Studio ou Visual Studio Code, do SDK do .NET e do pacote SQLite para .NET. Você pode instalar esses pacotes usando a CLI do .NET.
Como posso gerar um relatório em PDF a partir dos resultados de uma consulta ao banco de dados?
Utilize o IronPDF para gerar um relatório em PDF a partir dos resultados de uma consulta ao banco de dados. Para isso, primeiro recupere os dados com o Dapper e, em seguida, formate a saída como um PDF usando as funcionalidades do IronPDF.
Como faço para criar e consultar um banco de dados SQLite usando Dapper em C#?
Crie um banco de dados SQLite estabelecendo uma conexão com SqliteConnection e executando consultas SQL usando o método Execute do Dapper. Você pode consultar o banco de dados usando o método Query do Dapper para recuperar dados de forma eficiente.
O Dapper consegue lidar com relações de dados complexas?
Sim, o Dapper consegue lidar com relacionamentos um-para-muitos e muitos-para-muitos usando seus recursos de mapeamento múltiplo, o que simplifica a recuperação de dados complexos.
Quais são as vantagens de usar uma biblioteca de geração de PDF em .NET?
Uma biblioteca de geração de PDF como o IronPDF aprimora os aplicativos .NET, permitindo a geração e manipulação perfeitas de PDFs, oferecendo recursos como conversão de HTML para PDF, edição de PDF, mesclagem, divisão e recursos de segurança.
Como faço para obter uma licença de avaliação do IronPDF?
Você pode obter uma licença de avaliação do IronPDF através da página de licenças de avaliação do IronPDF. A chave de licença precisa ser incluída na configuração do seu projeto.




