Dapper C# (jak to działa dla programistów)
W nowoczesnym tworzeniu oprogramowania wydajny dostęp do baz danych ma kluczowe znaczenie dla wydajności i skalowalności aplikacji. Dapper, lekki mapper obiektowo-relacyjny (ORM) dla platformy .NET, oferuje usprawnione podejście do interakcji z bazami danych. W tym artykule omówimy, jak używać Dapper C# z plikiem bazy danych SQLite, pokazując jego prostotę i skuteczność na przykładach kodu. Dodatkowo przedstawię niezwykłą bibliotekę do generowania plików PDF o nazwie IronPDF firmy Iron Software.
Czym jest Dapper?
Dapper to framework do mapowania obiektowo-relacyjnego (ORM) dla platformy .NET Framework. Jest to prosty mapper obiektów, który pozwala na mapowanie obiektowego modelu domeny do tradycyjnej relacyjnej bazy danych. Dapper jest znany ze swojej szybkości i wydajności, często nazywany jest "królem mikro ORM". Dorównuje szybkością surowemu czytnikowi danych ADO.NET i wzbogaca interfejs IDbConnection o przydatne metody rozszerzeń do wysyłania zapytań do baz danych SQL.
Najważniejsze cechy Dapper
- Wydajność: Dapper jest znany ze swojej doskonałej wydajności dzięki lekkiej konstrukcji i wydajnemu mapowaniu obiektów.
- Prostota: API Dapper jest minimalistyczne i intuicyjne, co ułatwia programistom jego zrozumienie i efektywne wykorzystanie.
- Obsługa surowego kodu SQL: Dapper pozwala programistom na pisanie zapytań w surowym kodzie SQL, zapewniając pełną kontrolę nad interakcjami z bazą danych.
- Mapowanie obiektów: Dapper mapuje wyniki zapytań bezpośrednio na obiekty C#, ograniczając ilość powtarzalnego kodu i zwiększając czytelność kodu.
- Zapytania parametryczne: Dapper obsługuje zapytania parametryczne, chroniąc przed atakami typu SQL injection i poprawiając wydajność.
- Multi-Mapping: Dapper płynnie obsługuje relacje jeden do wielu i wiele do wielu, umożliwiając wydajne wykonywanie wielu zapytań, co upraszcza pobieranie złożonych danych.
Asynchroniczny dostęp do danych za pomocą Dapper
Dapper oferuje asynchroniczne metody rozszerzeń, które odzwierciedlają ich synchroniczne odpowiedniki, umożliwiając programistom asynchroniczne wykonywanie zapytań do bazy danych. Te metody asynchroniczne są idealne do operacji związanych z wejściem/wyjściem, takich jak zapytania do bazy danych, gdzie główny wątek może kontynuować wykonywanie innych zadań, czekając na zakończenie operacji bazodanowej.
Kluczowe metody asynchroniczne w Dapper
QueryAsync: Wykonuje zapytanie SQL asynchronicznie i zwraca wynik jako sekwencję obiektów dynamicznych lub obiektów silnie typowanych.QueryFirstOrDefaultAsync: Wykonuje zapytanie SQL asynchronicznie i zwraca pierwszy wynik lub wartość domyślną, jeśli nie znaleziono żadnego wyniku.ExecuteAsync: Wykonuje polecenie SQL asynchronicznie (np. INSERT, UPDATE, DELETE) i zwraca liczbę wierszy, których dotyczy operacja.
Konfiguracja środowiska: Zanim przejdziesz do przykładów kodu, upewnij się, że masz zainstalowane niezbędne narzędzia:
- Visual Studio lub Visual Studio Code.
- .NET SDK.
- Pakiet SQLite dla .NET.
Aby zainstalować pakiet SQLite, wykonaj następujące polecenie w katalogu projektu:
dotnet add package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite
Tworzenie bazy danych SQLite: W celach demonstracyjnych utwórzmy prosty plik bazy danych SQLite o nazwie "example.db" z tabelą "Users" zawierającą kolumny "Id", "Name" i "Email".
CREATE TABLE Users (
Id INTEGER PRIMARY KEY,
Name TEXT,
Email TEXT
);
Korzystanie z Dapper z SQLite
- Najpierw upewnij się, że zaimportowano niezbędne przestrzenie nazw:
using Microsoft.Data.Sqlite;
using Dapper;
using Microsoft.Data.Sqlite;
using Dapper;
Imports Microsoft.Data.Sqlite
Imports Dapper
-
Nawiąż połączenie z bazą danych 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 -
Wykonaj zapytanie za pomocą 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 -
Wprowadź dane do bazy danych za pomocą 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
Przedstawiamy IronPDF
IronPDF to biblioteka C# firmy Iron Software, która umożliwia programistom tworzenie, edycję i manipulowanie dokumentami PDF programowo w ramach aplikacji .NET. Oferuje funkcje takie jak generowanie dokumentów PDF z HTML, obrazów i innych formatów, a także dodawanie tekstu, obrazów i różnych elementów do istniejących plików PDF. IronPDF ma na celu uproszczenie zadań związanych z generowaniem i edycją plików PDF dla programistów .NET poprzez dostarczenie kompleksowego zestawu narzędzi i interfejsów API.
IronPDF oferuje szereg funkcji do generowania i edycji plików PDF w aplikacjach .NET:
- Konwersja HTML do PDF: Konwertuj treści HTML, w tym style CSS, na dokumenty PDF.
- Konwersja obrazów do formatu PDF: Konwersja obrazów (takich jak JPEG, PNG, BMP) do dokumentów PDF.
- Konwersja tekstu do formatu PDF: Konwersja zwykłego tekstu lub tekstu sformatowanego (RTF) do dokumentów PDF.
- Generowanie plików PDF: Tworzenie dokumentów PDF od podstaw za pomocą kodu.
- Edycja plików PDF: Edytuj istniejące dokumenty PDF, dodając lub modyfikując tekst, obrazy i inne elementy.
- Łączenie i dzielenie plików PDF: Łącz wiele dokumentów PDF w jeden dokument lub dziel dokument PDF na wiele plików.
- Zabezpieczenia plików PDF: Zastosuj ochronę hasłem i szyfrowanie dokumentów PDF, aby ograniczyć dostęp i chronić poufne informacje.
- Wypełnianie formularzy PDF: Programowe wypełnianie formularzy PDF danymi.
- Drukowanie plików PDF: Drukuj dokumenty PDF bezpośrednio z aplikacji .NET.
- Ustawienia konwersji do formatu PDF: Dostosuj różne ustawienia, takie jak rozmiar strony, orientacja, marginesy, kompresja i inne podczas generowania pliku PDF.
- Wyodrębnianie tekstu z plików PDF: Wyodrębnianie treści tekstowej z dokumentów PDF w celu dalszego przetwarzania lub analizy.
- Metadane PDF: Ustaw metadane (autor, tytuł, temat, słowa kluczowe) dla dokumentów PDF.
Generowanie dokumentów PDF za pomocą IronPDF i Dapper
Utwórz aplikację konsolową w Visual Studio

Podaj nazwę projektu i lokalizację

Wybierz wersję .NET

Zainstaluj następujące pakiety za pomocą Menedżera pakietów Visual Studio lub konsoli
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

Użyj poniższego kodu, aby wygenerować dokument 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);
'}
Wyjaśnienie kodu
- Zacznij od utworzenia kontenera na ciąg znaków do generowania pliku PDF.
- Utwórz nową bazę danych za pomocą
Microsoft.Data.Sqlite,connection.Open()utworzy pustą bazę danych. - Utwórz tabelę
Usersprzy użyciu Dapper i wykonaj zapytania SQL w celu wstawienia danych. - Dodaj użytkowników do tabeli za pomocą Dapper przy użyciu zapytań insert.
- Zapytanie służące do wybrania wszystkich użytkowników z bazy danych.
- Zapisz wygenerowaną treść jako plik PDF, korzystając z metod
ChromePdfRendereriSaveAsudostępnianych przez IronPDF.
Wynik

Licencja (dostępna wersja próbna dla IronPDF)
Dostępne są informacje dotyczące licencji IronPDF, które pomogą zapewnić zgodność i prawidłowe wykorzystanie w ramach projektu.
Licencję Trial dla programistów można uzyskać na stronie licencji Trial IronPDF.
Proszę zastąpić klucz w pliku appSettings.json pokazanym poniżej:
{
"IronPdf.License.LicenseKey" : "The Key Goes Here"
}
Wnioski
Dapper upraszcza dostęp do danych w aplikacjach .NET, a w połączeniu z SQLite zapewnia lekkie i wydajne rozwiązanie do zarządzania bazami danych. Postępując zgodnie z instrukcjami zawartymi w tym artykule, możesz wykorzystać Dapper do płynnej interakcji z bazami danych SQLite, co pozwoli Ci z łatwością tworzyć solidne i skalowalne aplikacje. Oprócz IronPDF programiści mogą zdobyć umiejętności związane z bazami danych ORM, takimi jak Dapper, oraz bibliotekami do generowania plików PDF, takimi jak IronPDF.
Często Zadawane Pytania
Czym jest Dapper w języku C#?
Dapper to framework do mapowania obiektowo-relacyjnego (ORM) dla platformy .NET Framework, znany ze swojej szybkości i wydajności. Pozwala programistom na mapowanie obiektowego modelu domeny do tradycyjnej relacyjnej bazy danych.
W jaki sposób Dapper poprawia wydajność operacji na bazach danych?
Dapper poprawia wydajność dzięki swojej lekkości i wydajnemu mapowaniu obiektów. Dorównuje szybkością surowemu czytnikowi danych ADO.NET i wzbogaca interfejs IDbConnection o przydatne metody rozszerzeń do wysyłania zapytań do baz danych SQL.
Jak mogę uzyskać asynchroniczny dostęp do danych za pomocą Dapper?
Dapper oferuje asynchroniczne metody rozszerzeń, takie jak QueryAsync, QueryFirstOrDefaultAsync i ExecuteAsync, które pozwalają programistom na asynchroniczne wykonywanie zapytań do bazy danych, co jest idealnym rozwiązaniem dla operacji związanych z wejściem/wyjściem.
Jak zintegrować generowanie plików PDF z aplikacją .NET?
Za pomocą IronPDF można zintegrować generowanie plików PDF z aplikacją .NET. Umożliwia to programowe tworzenie, edycję i manipulowanie dokumentami PDF, w tym konwersję HTML, obrazów i tekstu do formatu PDF oraz edycję istniejących plików PDF.
Jak skonfigurować środowisko do korzystania z Dapper z SQLite?
Aby skonfigurować środowisko, potrzebujesz Visual Studio lub Visual Studio Code, .NET SDK oraz pakietu SQLite dla .NET. Pakiety te można zainstalować za pomocą interfejsu CLI dotnet.
Jak mogę wygenerować raport PDF na podstawie wyników zapytania do bazy danych?
Użyj IronPDF do wygenerowania raportu PDF na podstawie wyników zapytania do bazy danych, najpierw pobierając dane za pomocą Dapper, a następnie formatując wynik jako plik PDF przy użyciu funkcji IronPDF.
Jak utworzyć i przeszukiwać bazę danych SQLite przy użyciu Dapper w języku C#?
Utwórz bazę danych SQLite, nawiązując połączenie za pomocą SqliteConnection i wykonując zapytania SQL przy użyciu metody Execute biblioteki Dapper. Możesz wysyłać zapytania do bazy danych za pomocą metody Query biblioteki Dapper, aby efektywnie pobierać dane.
Czy Dapper radzi sobie ze złożonymi relacjami między danymi?
Tak, Dapper może obsługiwać relacje jeden do wielu i wiele do wielu dzięki swoim możliwościom wielokrotnego mapowania, które upraszczają pobieranie złożonych danych.
Jakie są zalety korzystania z biblioteki do generowania plików PDF w środowisku .NET?
Biblioteka do generowania plików PDF, taka jak IronPDF, wzbogaca aplikacje .NET, umożliwiając płynne generowanie i edycję plików PDF oraz oferując funkcje takie jak konwersja HTML do PDF, edycja, łączenie i dzielenie plików PDF oraz funkcje bezpieczeństwa.
Jak uzyskać Licencję Trial na IronPDF?
Licencję Trial na IronPDF można uzyskać na stronie licencji Trial IronPDF. Klucz licencyjny należy dołączyć do konfiguracji projektu.




