Passer au contenu du pied de page
.NET AIDE

Dapper C# (Comment ça fonctionne pour les développeurs)

Dans le développement logiciel moderne, accéder aux bases de données efficacement est crucial pour la performance et la scalabilité des applications. Dapper, un mappage objet-relationnel (ORM) léger pour .NET, offre une approche simplifiée de l'interaction avec les bases de données. Dans cet article, nous explorerons comment utiliser Dapper C# avec un fichier de base de données SQLite, démontrant sa simplicité et son efficacité à travers des exemples de code. Additionally, I will introduce the remarkable PDF generation library called IronPDF from Iron Software.

Qu'est-ce que Dapper ?

Dapper est un framework de mappage objet-relationnel (ORM) pour la plateforme .NET. C'est un mappeur d'objets simple qui vous permet de mapper un modèle de domaine orienté objet à une base de données relationnelle traditionnelle. Dapper est connu pour sa rapidité et sa performance, souvent appelé le « Roi des Micro ORM ». Il égale la vitesse d'un lecteur de données ADO.NET brut et améliore l'interface IDbConnection avec des méthodes d'extension utiles pour interroger des bases de données SQL.

Caractéristiques clés de Dapper

  1. Performance : Dapper est connu pour ses excellentes performances grâce à sa conception légère et son mappage efficace des objets.
  2. Simplicité : L'API de Dapper est minimaliste et intuitive, ce qui la rend facile à comprendre et à utiliser efficacement pour les développeurs.
  3. Support SQL brut : Dapper permet aux développeurs d'écrire des requêtes SQL brutes, offrant un contrôle total sur les interactions avec la base de données.
  4. Mapping d'objets : Dapper mappe les résultats des requêtes directement sur des objets C#, réduisant le code répétitif et améliorant la lisibilité du code.
  5. Requêtes paramétrées : Dapper prend en charge les requêtes paramétrées, protégeant contre les attaques d'injection SQL et améliorant les performances.
  6. Multi-mapping : Dapper gère sans effort les relations un-à-plusieurs et plusieurs-à-plusieurs, permettant à de multiples requêtes d'être exécutées efficacement, simplifiant ainsi la récupération de données complexes.

Accès asynchrone aux données avec Dapper

Dapper offre des méthodes d'extension asynchrones qui reflètent leurs équivalents synchrones, permettant aux développeurs d'exécuter des requêtes de base de données de manière asynchrone. Ces méthodes asynchrones sont idéales pour les opérations liées à l'I/O, telles que les requêtes de base de données, où le thread principal peut continuer à exécuter d'autres tâches en attendant la fin de l'opération de base de données.

Principales méthodes asynchrones dans Dapper

  1. QueryAsync : Exécute une requête SQL de manière asynchrone et renvoie le résultat sous forme de séquence d'objets dynamiques ou d'objets fortement typés.
  2. QueryFirstOrDefaultAsync : Exécute une requête SQL de manière asynchrone et renvoie le premier résultat ou une valeur par défaut si aucun résultat n'est trouvé.
  3. ExecuteAsync : Exécute une commande SQL de manière asynchrone (par exemple, INSERT, UPDATE, DELETE) et renvoie le nombre de lignes affectées.

Configurer l'environnement : Avant de plonger dans les exemples de code, assurez-vous d'avoir les outils nécessaires installés :

  1. Visual Studio ou Visual Studio Code.
  2. .NET SDK.
  3. Package SQLite pour .NET.

Pour installer le package SQLite, exécutez la commande suivante dans le répertoire de votre projet :

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

Créer une base de données SQLite : À des fins de démonstration, créons un simple fichier de base de données SQLite nommé "example.db" avec une table "Users" contenant des colonnes pour "Id", "Name", et "Email".

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

Utiliser Dapper avec SQLite

  1. D'abord, assurez-vous d'avoir importé les espaces de noms nécessaires :
using Microsoft.Data.Sqlite;
using Dapper;
using Microsoft.Data.Sqlite;
using Dapper;
Imports Microsoft.Data.Sqlite
Imports Dapper
$vbLabelText   $csharpLabel
  1. Établissez une connexion avec la base de données 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. Exécutez une requête avec 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. Insérez des données dans la base de données en utilisant 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

Présentation d'IronPDF

IronPDF is a C# library from Iron Software qui permet aux développeurs de créer, éditer et manipuler des documents PDF par programmation au sein des applications .NET. Elle offre des fonctionnalités telles que la génération de documents PDF à partir de HTML, d'images et d'autres formats, ainsi que l'ajout de texte, d'images et de divers éléments à des fichiers PDF existants. IronPDF vise à simplifier les tâches de génération et de manipulation de PDF pour les développeurs .NET en offrant un ensemble complet d'outils et d'API.

IronPDF propose une gamme de fonctionnalités pour la génération et la manipulation de PDF au sein des applications .NET :

  1. Conversion HTML en PDF : Convertir du contenu HTML, y compris des styles CSS, en documents PDF.
  2. Conversion d'image en PDF : Convertir des images (telles que JPEG, PNG, BMP) en documents PDF.
  3. Conversion de texte en PDF : Convertir du texte brut ou formaté (RTF) en documents PDF.
  4. Génération de PDF : Créer des documents PDF à partir de zéro par programmation.
  5. Édition de PDF : Éditer des documents PDF existants en ajoutant ou en modifiant du texte, des images et d'autres éléments.
  6. Fusion et scission de PDF : Combiner plusieurs documents PDF en un seul document, ou diviser un document PDF en plusieurs fichiers.
  7. Sécurité de PDF : Appliquer une protection par mot de passe et un chiffrement aux documents PDF pour restreindre l'accès et protéger les informations sensibles.
  8. Remplissage de formulaires PDF : Remplir des formulaires PDF avec des données par programmation.
  9. Impression de PDF : Imprimer des documents PDF directement depuis votre application .NET.
  10. Paramètres de conversion de PDF : Personnaliser divers paramètres tels que la taille de la page, l'orientation, les marges, la compression et plus encore lors de la génération de PDF.
  11. Extraction de texte PDF : Extraire le contenu texte des documents PDF pour un traitement ou une analyse ultérieure.
  12. Métadonnées PDF : Définir les métadonnées (auteur, titre, sujet, mots-clés) pour les documents PDF.

Générer des documents PDF avec IronPDF et Dapper

Créez une application console dans Visual Studio

Dapper C# (Comment ça fonctionne pour les développeurs) : Figure 1 - Création d'une application console dans Visual Studio

Fournissez le nom et l'emplacement du projet

Dapper C# (Comment ça fonctionne pour les développeurs) : Figure 2 - Nommer le projet

Sélectionner la version de .NET

Dapper C# (Comment ça fonctionne pour les développeurs) : Figure 3 - Sélectionner la version .NET souhaitée

Installez les packages suivants soit depuis le gestionnaire de packages de Visual Studio soit depuis la console

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

Dapper C# (Comment ça fonctionne pour les développeurs) : Figure 4 - Installation de Microsoft Data Sqlite depuis le gestionnaire de packages Visual Studio

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

Dapper C# (Comment ça fonctionne pour les développeurs) : Figure 5 - Installation de Dapper depuis le gestionnaire de packages Visual Studio

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

Dapper C# (Comment ça fonctionne pour les développeurs) : Figure 6 - Installation de IronPDF depuis le gestionnaire de packages Visual Studio

Utilisez le code ci-dessous pour générer un document 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

Explication du code

  1. Commencez par créer un contenu de chaîne pour la génération de PDF.
  2. Créez une nouvelle base de données en utilisant Microsoft.Data.Sqlite, connection.Open() créera une base de données vide.
  3. Créez une table Users en utilisant Dapper et exécutez des requêtes SQL pour l'insertion.
  4. Ajoutez des utilisateurs à la table en utilisant Dapper avec des requêtes d'insertion.
  5. Requête pour sélectionner tous les utilisateurs de la base de données.
  6. Enregistrez le contenu généré sous forme de PDF en utilisant les méthodes ChromePdfRenderer et SaveAs fournies par IronPDF.

Sortie

Dapper C# (Comment ça fonctionne pour les développeurs) : Figure 7 - Exemple de sortie PDF utilisant tous les packages installés ci-dessus

Licence (Essai disponible pour IronPDF)

Les informations de licence de IronPDF sont disponibles pour garantir la conformité et l'utilisation au sein de votre projet.

Une licence d'essai pour les développeurs peut être obtenue via la page de licence d'essai d'IronPDF.

Veuillez remplacer la clé dans le fichier appSettings.json ci-dessous :

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

Conclusion

Dapper simplifie l'accès aux données dans les applications .NET, et lorsqu'il est combiné avec SQLite, il offre une solution légère et efficace pour gérer les bases de données. En suivant les étapes décrites dans cet article, vous pouvez exploiter Dapper pour interagir de manière transparente avec les bases de données SQLite, vous permettant de créer des applications robustes et évolutives avec facilité. Avec IronPDF, les développeurs peuvent acquérir des compétences liées aux bases de données ORM comme Dapper et aux bibliothèques de génération de PDF comme IronPDF.

Questions Fréquemment Posées

Qu'est-ce que Dapper en C# ?

Dapper est un framework de mapping objet-relationnel (ORM) pour la plateforme .NET, connu pour sa rapidité et ses performances. Il permet aux développeurs de mapper un modèle de domaine orienté objets à une base de données relationnelle traditionnelle.

Comment Dapper améliore-t-il les performances des opérations de base de données ?

Dapper améliore les performances en étant léger et en mappant efficacement les objets. Il rivalise avec la vitesse d'un lecteur de données ADO.NET brut et améliore l'interface IDbConnection avec des méthodes d'extension utiles pour interroger les bases de données SQL.

Comment puis-je effectuer un accès asynchrone aux données avec Dapper ?

Dapper offre des méthodes d'extension asynchrones comme QueryAsync, QueryFirstOrDefaultAsync, et ExecuteAsync, qui permettent aux développeurs d'exécuter des requêtes de base de données de manière asynchrone, idéal pour les opérations liées à l'entrée/sortie.

Comment puis-je intégrer la génération de PDF dans une application .NET ?

Vous pouvez intégrer la génération de PDF dans une application .NET en utilisant IronPDF. Cela permet de créer, modifier et manipuler des documents PDF par programmation, y compris la conversion de HTML, d'images et de texte en PDF, et la modification de PDFs existants.

Comment configurer l'environnement pour utiliser Dapper avec SQLite ?

Pour configurer l'environnement, vous avez besoin de Visual Studio ou Visual Studio Code, du SDK .NET et du package SQLite pour .NET. Vous pouvez installer ces packages à l'aide de l'interface CLI dotnet.

Comment puis-je générer un rapport PDF à partir des résultats de requêtes de base de données ?

Utilisez IronPDF pour générer un rapport PDF à partir des résultats de requêtes de base de données en récupérant d'abord les données avec Dapper et en formatant ensuite la sortie en tant que PDF à l'aide des fonctionnalités d'IronPDF.

Comment créer et interroger une base de données SQLite en utilisant Dapper en C# ?

Créez une base de données SQLite en établissant une connexion avec SqliteConnection et en exécutant des requêtes SQL à l'aide de la méthode Execute de Dapper. Vous pouvez interroger la base de données en utilisant la méthode Query de Dapper pour récupérer efficacement des données.

Dapper peut-il gérer des relations de données complexes ?

Oui, Dapper peut gérer des relations un-à-plusieurs et plusieurs-à-plusieurs en utilisant ses capacités de multi-mappage, qui simplifient la récupération de données complexes.

Quels sont les avantages d'utiliser une bibliothèque de génération PDF dans .NET ?

Une bibliothèque de génération PDF comme IronPDF améliore les applications .NET en permettant une génération et une manipulation fluides de PDF, offrant des fonctionnalités de conversion HTML en PDF, d'édition de PDF, de fusion, de division et de fonctionnalités de sécurité.

Comment obtenir une licence d'essai pour IronPDF ?

Une licence d'essai pour IronPDF peut être obtenue via la page de licence d'essai d'IronPDF. La clé de licence doit être incluse dans la configuration de votre projet.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite