Ir para o conteúdo do rodapé
AJUDA DO .NET

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

  1. Desempenho: O Dapper é conhecido por seu excelente desempenho devido ao seu design leve e mapeamento de objetos eficiente.
  2. Simplicidade: A API do Dapper é minimalista e intuitiva, facilitando o seu entendimento e utilização eficaz por parte dos desenvolvedores.
  3. 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.
  4. 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.
  5. Consultas parametrizadas: O Dapper suporta consultas parametrizadas, protegendo contra ataques de injeção de SQL e melhorando o desempenho.
  6. 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

  1. 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.
  2. QueryFirstOrDefaultAsync: Executa uma consulta SQL de forma assíncrona e retorna o primeiro resultado ou um valor padrão se nenhum resultado for encontrado.
  3. 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:

  1. Visual Studio ou Visual Studio Code.
  2. SDK .NET .
  3. 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
SHELL

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

  1. 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
$vbLabelText   $csharpLabel
  1. 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
  2. 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
  3. 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 :

  1. Conversão de HTML para PDF: Converta conteúdo HTML, incluindo estilos CSS, em documentos PDF.
  2. Conversão de imagem para PDF: Converta imagens (como JPEG, PNG, BMP) em documentos PDF.
  3. Conversão de texto para PDF: Converta texto simples ou texto formatado (RTF) em documentos PDF.
  4. Geração de PDF: Crie documentos PDF do zero programaticamente.
  5. Edição de PDF: Edite documentos PDF existentes adicionando ou modificando texto, imagens e outros elementos.
  6. 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.
  7. Segurança de PDF: Aplique proteção por senha e criptografia a documentos PDF para restringir o acesso e proteger informações confidenciais.
  8. Preenchimento de formulários em PDF: Preencha formulários em PDF com dados de forma programática.
  9. Impressão de PDF: Imprima documentos PDF diretamente do seu aplicativo .NET .
  10. 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.
  11. Extração de texto de PDF: Extrai o conteúdo de texto de documentos PDF para posterior processamento ou análise.
  12. 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.

Dapper C# (Como funciona para desenvolvedores): Figura 1 - Criando um aplicativo de console no Visual Studio

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

Dapper C# (Como funciona para desenvolvedores): Figura 2 - Nomeando o projeto

Selecione a versão do .NET

Dapper C# (Como funciona para desenvolvedores): Figura 3 - Selecione a versão .NET desejada

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
SHELL

Dapper C# (Como funciona para desenvolvedores): Figura 4 - Instalando o Microsoft Data Sqlite a partir do Gerenciador de Pacotes do Visual Studio

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

Dapper C# (Como funciona para desenvolvedores): Figura 5 - Instalando o Dapper a partir do Gerenciador de Pacotes do Visual Studio

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

Dapper C# (Como funciona para desenvolvedores): Figura 6 - Instalando o IronPDF a partir do Gerenciador de Pacotes do Visual Studio

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);
'}
$vbLabelText   $csharpLabel

Explicação do código

  1. Comece criando um contêiner de conteúdo de texto para geração de PDF.
  2. Crie um novo banco de dados usando Microsoft.Data.Sqlite, connection.Open() criará um banco de dados vazio.
  3. Crie uma tabela Users usando o Dapper e execute consultas SQL para inserção.
  4. Adicione usuários à tabela usando Dapper com consultas de inserção.
  5. Consulta para selecionar todos os usuários do banco de dados.
  6. Salve o conteúdo gerado como um PDF usando os métodos ChromePdfRenderer e SaveAs fornecidos pelo IronPDF.

Saída

Dapper C# (Como funciona para desenvolvedores): Figura 7 - Exemplo de saída em PDF utilizando todos os pacotes instalados acima

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.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim