跳過到頁腳內容
.NET幫助

Sqlite C# .NET(開發者的工作原理)

SQLite 是一個受歡迎的、輕量且自包含的關聯型資料庫引擎,廣泛應用於各種資料訪問應用程式和環境平台。 在.NET開發中,SQLite源代碼是一個將可靠的資料庫解決方案控制整合到您的系統應用程式中的絕佳選擇。 本文將深入探討SQLite交易,探索其功能、優勢以及如何在您的.NET專案中有效利用它。

如何在C#中使用SQLite

  1. 下載SQLite程式庫
  2. 創建資料庫並插入數據
  3. 使用讀取器讀取
  4. 使用Entity Framework和LINQ查詢方法使用SQLite
  5. 使用IronPDF 生成PDF報告

什麼是SQLite?

SQLite 是一個受歡迎的開源資料庫引擎,可以嵌入到應用程式中,而不需要單獨的伺服器元件。 它速度快、可靠且跨平台。 SQLite 可以通過提供ADO.NET介面的多個程式庫在.NET專案應用程式中使用。 其中一個程式庫是Microsoft.Data.SQLite。 這使您可以使用SQLite作為您的.NET應用程式的資料來源,無論它們是控制台、桌面、Web還是移動應用程式。您還可以使用Entity Framework Core進行對象關聯映射,並使用LINQ查詢您的SQLite資料庫。

本文將向您展示如何使用Microsoft.Data.Sqlite在.NET控制台應用程式中開發、連接和操作SQLite資料庫。 您將學習如何:

  • 安裝Microsoft.Data.Sqlite NuGet套件
  • 創建SQLite連接並執行SQL命令
  • 使用數據讀取器和參數創建和填充表
  • 使用數據讀取器查詢數據
  • 實施EntityFramework Core
  • 使用LINQ查詢數據
  • 生成PDF報告

安裝SQLite程式庫

要使用Microsoft.Data.Sqlite,您需要安裝包含該程式庫及其依賴項的NuGet套件。 您可以使用Visual Studio套件管理器、.NET Core CLI或任何支持NuGet的工具來完成此操作。 本文將使用套件管理器創建控制台應用程式並安裝Microsoft.Data.Sqlite。為此,請打開套件管理器控制台並運行以下命令:

Install-Package Microsoft.Data.Sqlite

以上命令將安裝如下所示的套件。

創建SQLite資料庫

要與SQLite資料庫一起工作,您需要創建一個代表對資料庫文件連接的SqliteConnection對象。您可以在連接字串中指定文件名和其他選項。 如果文件不存在,將自動創建。 例如,下面的程式建立了一個連接到當前目錄中名為employee.db的資料庫文件的連接:

using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    connection.Open();
    // ...
}
using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    connection.Open();
    // ...
}
$vbLabelText   $csharpLabel

using語句確保當連接超出範圍時,它會被關閉和釋放。 要執行SQL命令,您需要創建一個SqlCommand對象並將其與該連接相關聯。 您可以設置Parameters集合中。 然後您可以調用ExecuteReader來執行該命令。

在SQLite中創建表

以下代碼使用ExecuteNonQuery方法創建表名為Employee的表:

using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    connection.Open();
    var command = connection.CreateCommand();
    command.CommandText = @"CREATE TABLE Employee (
        Id INTEGER PRIMARY KEY,
        FirstName TEXT NOT NULL,
        LastName TEXT NOT NULL,
        Designation TEXT NOT NULL )";
    command.ExecuteNonQuery();
}
using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    connection.Open();
    var command = connection.CreateCommand();
    command.CommandText = @"CREATE TABLE Employee (
        Id INTEGER PRIMARY KEY,
        FirstName TEXT NOT NULL,
        LastName TEXT NOT NULL,
        Designation TEXT NOT NULL )";
    command.ExecuteNonQuery();
}
$vbLabelText   $csharpLabel

將數據插入表中

要將數據插入表中,您可以使用相同的CommandText屬性設置為INSERT語句。 例如,下面的代碼將三行插入到了Employee表中。

using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    var command = connection.CreateCommand();
    StringBuilder builder = new StringBuilder();
    builder.Append("INSERT INTO Employee VALUES(1, 'John', 'Sami', 'CEO');");
    builder.Append("INSERT INTO Employee VALUES(2, 'David', 'Watson', 'Software Engineer');");
    builder.Append("INSERT INTO Employee VALUES(3, 'Victor', 'Khan', 'Content Writer');");
    connection.Open();
    command.CommandText = builder.ToString();
    command.ExecuteNonQuery();
}
using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    var command = connection.CreateCommand();
    StringBuilder builder = new StringBuilder();
    builder.Append("INSERT INTO Employee VALUES(1, 'John', 'Sami', 'CEO');");
    builder.Append("INSERT INTO Employee VALUES(2, 'David', 'Watson', 'Software Engineer');");
    builder.Append("INSERT INTO Employee VALUES(3, 'Victor', 'Khan', 'Content Writer');");
    connection.Open();
    command.CommandText = builder.ToString();
    command.ExecuteNonQuery();
}
$vbLabelText   $csharpLabel

從SQLite讀取數據

要從表中讀取數據,您可以使用CommandText屬性為SELECT語句。 這將返回一個SqliteDataReader對象,允許您迭代行並根據列名或索引訪問值。 您可以使用GetXXX方法將值獲得為適當的數據類型。 例如,下面的代碼從Employee表中讀取所有行並打印到控制台:

using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    var command = connection.CreateCommand();
    command.CommandText = @"SELECT * FROM Employee";
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            var id = reader.GetInt32(0);
            string firstName = reader.GetString(1);
            string lastName = reader.GetString(2);
            string designation = reader.GetString(3);
            Console.WriteLine($"{id}: {firstName} - {lastName} - {designation}");
        }
    }
}
using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    var command = connection.CreateCommand();
    command.CommandText = @"SELECT * FROM Employee";
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            var id = reader.GetInt32(0);
            string firstName = reader.GetString(1);
            string lastName = reader.GetString(2);
            string designation = reader.GetString(3);
            Console.WriteLine($"{id}: {firstName} - {lastName} - {designation}");
        }
    }
}
$vbLabelText   $csharpLabel

輸出

此代碼的輸出為:

Sqlite C# .NET(開發者使用指南):圖1 - 輸出

查詢數據

如果您更願意使用LINQ來查詢您的SQLite資料庫,您可以使用Entity Framework Core將您的表映射到類並使用LINQ表達式進行查詢。 為此,您需要安裝Microsoft.EntityFrameworkCore.Sqlite套件,它依賴於Microsoft.Data.Sqlite套件。 您還需要創建一個繼承自DbContext並代表資料庫上下文的類。 該類必須有一個接受DbContextOptions參數的構造函數,並將其傳遞給基類構造函數。 它還必須有每個想要映射到類的表的DbSet屬性。 例如,以下代碼定義了一個DatabaseContext類:

using Microsoft.EntityFrameworkCore;
public class Stock
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public string Symbol { get; set; } = string.Empty;
    public double Price { get; set; }
}
public class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions options) : base(options) { }
    public DbSet<Stock> Stock { get; set; }
}
using Microsoft.EntityFrameworkCore;
public class Stock
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public string Symbol { get; set; } = string.Empty;
    public double Price { get; set; }
}
public class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions options) : base(options) { }
    public DbSet<Stock> Stock { get; set; }
}
$vbLabelText   $csharpLabel

要創建資料庫上下文,您需要使用DbContextOptionsBuilder類並指定連接字串和資料庫提供者。 您還可以使用Database.EnsureCreated方法創建資料庫和表(如果不存在)。例如,以下代碼創建資料庫上下文和資料庫:

var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
optionsBuilder.UseSqlite("Data Source=stock.db");
using (var context = new DatabaseContext(optionsBuilder.Options))
{
    context.Database.EnsureCreated();
}
var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
optionsBuilder.UseSqlite("Data Source=stock.db");
using (var context = new DatabaseContext(optionsBuilder.Options))
{
    context.Database.EnsureCreated();
}
$vbLabelText   $csharpLabel

要將數據插入資料庫,您可以使用DbSet屬性上,並傳遞您要插入的對象。 您還可以使用SaveChanges方法將更改提交到資料庫。 例如,以下代碼將三個庫存插入到資料庫中:

static void Main(string[] args)
{
    var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
    optionsBuilder.UseSqlite("Data Source=stock.db");
    using (var context = new DatabaseContext(optionsBuilder.Options))
    {
        context.Database.EnsureCreated();
        var stock = new List<Stock> {
            new Stock { Id = 1, Name = "NCR", Symbol = "$$", Price = 5.6 },
            new Stock { Id = 2, Name = "Google", Symbol = "GG", Price = 10.6 },
            new Stock { Id = 3, Name = "Apple", Symbol = "AA", Price = 3.6 }
        };
        context.AddRange(stock);
        context.SaveChanges();
    }
}
static void Main(string[] args)
{
    var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
    optionsBuilder.UseSqlite("Data Source=stock.db");
    using (var context = new DatabaseContext(optionsBuilder.Options))
    {
        context.Database.EnsureCreated();
        var stock = new List<Stock> {
            new Stock { Id = 1, Name = "NCR", Symbol = "$$", Price = 5.6 },
            new Stock { Id = 2, Name = "Google", Symbol = "GG", Price = 10.6 },
            new Stock { Id = 3, Name = "Apple", Symbol = "AA", Price = 3.6 }
        };
        context.AddRange(stock);
        context.SaveChanges();
    }
}
$vbLabelText   $csharpLabel

要查詢數據,您可以在DbSet屬性上使用LINQ方法或表達式,並應用過濾、投射、聚合和其他操作。 這些查詢將被翻譯成SQL語句並在資料庫上執行。 例如,以下代碼查詢價格低於六美元的股票並打印其名稱:

using (var context = new DatabaseContext(optionsBuilder.Options))
{
    var cheapStocks = context.Stock.Where(p => p.Price < 6).Select(p => p.Name);
    Console.WriteLine("Stock Less than $6 are:");
    foreach (string stock in cheapStocks)
    {
        Console.WriteLine(stock);
    }
}
using (var context = new DatabaseContext(optionsBuilder.Options))
{
    var cheapStocks = context.Stock.Where(p => p.Price < 6).Select(p => p.Name);
    Console.WriteLine("Stock Less than $6 are:");
    foreach (string stock in cheapStocks)
    {
        Console.WriteLine(stock);
    }
}
$vbLabelText   $csharpLabel

假設我們有一個需要創建包含股票列表的PDF文件的場景。 我們可以輕鬆地使用IronPDF來實現這一點。

介紹IronPDF

IronPDF是一個幫助您在.NET應用程式中創建、編輯和讀取PDF文件的程式庫,無需多個包。 它可以從HTML、URL、JavaScript、CSS和多種圖像格式生成PDF,並增加頁眉、頁腳、簽名、附件和密碼。 它還支持跨平台兼容性、多執行緒和異步支持。

IronPDF的HTML轉PDF功能是其主要亮點,保留所有佈局和樣式。 它從Web內容生成PDF,非常適合報告、發票和文件。 您可以無縫地將HTML文件、URL和HTML字串轉換為PDF。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
$vbLabelText   $csharpLabel

安裝 IronPDF

要在我們的專案中安裝IronPDF,請在套件管理器控制台中輸入以下命令。

Install-Package IronPdf

此命令將安裝IronPDF及其所有依賴項。

添加授權金鑰

IronPDF需要授權金鑰才能使用。 我們可以輕鬆地從IronPDF試用授權頁面獲取試用授權金鑰。

在使用IronPDF前,將此代碼添加到您的應用程式的啟動過程中。 此方法通用且簡單,有效地適用於.NET Core和.NET Framework應用程式。

IronPdf.License.LicenseKey = "IRONSUITE.ABC.XYZ.MYCOMPANY.COM.ABC-DEPLOYMENT.TRIAL-P45MXL.TRIAL.EXPIRES.31.JAN.2028";
IronPdf.License.LicenseKey = "IRONSUITE.ABC.XYZ.MYCOMPANY.COM.ABC-DEPLOYMENT.TRIAL-P45MXL.TRIAL.EXPIRES.31.JAN.2028";
$vbLabelText   $csharpLabel

創建包含股票列表的PDF文件

這段C#代碼從存儲在SQLite資料庫中的股票數據生成PDF報告。 它動態地創建一個HTML表格,填充股票信息,並使用基於Chrome的PDF渲染器將表格轉換為可下載的"stock.pdf"文件,促進高效的報告和股票明細的分發。

var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
optionsBuilder.UseSqlite("Data Source=stock.db");
StringBuilder builder = new StringBuilder();
string style="<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<style>\r\n#stock {\r\n  font-family: Arial, Helvetica, sans-serif;\r\n  border-collapse: collapse;\r\n  width: 100%;\r\n}\r\n\r\n#stock td, #stock th {\r\n  border: 1px solid #ddd;\r\n  padding: 8px;\r\n}\r\n\r\n#stock tr:nth-child(even){background-color: #f2f2f2;}\r\n\r\n#stock tr:hover {background-color: #ddd;}\r\n\r\n#stock th {\r\n  padding-top: 12px;\r\n  padding-bottom: 12px;\r\n  text-align: left;\r\n  background-color: #04AA6D;\r\n  color: white;\r\n}\r\n</style>\r\n</head>\r\n<body>\r\n\r\n<h1>A Stock Table</h1>";
builder.Append(style);
builder.Append("<table id=\"stock\"><tr><td>Stock Symbol</td><td>Stock Name</td><td>Stock Price</td></tr>");
using (var context = new DatabaseContext(optionsBuilder.Options))
{
    var stocks = context.Stock;
    foreach (Stock stock in stocks)
    {
        builder.Append($"<tr><td>{stock.Symbol}</td><td>{stock.Name}</td><td>{stock.Price}</td></tr>");
    }
}
builder.Append("</table></body></html>");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(builder.ToString());
pdf.SaveAs("stock.pdf");
var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
optionsBuilder.UseSqlite("Data Source=stock.db");
StringBuilder builder = new StringBuilder();
string style="<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<style>\r\n#stock {\r\n  font-family: Arial, Helvetica, sans-serif;\r\n  border-collapse: collapse;\r\n  width: 100%;\r\n}\r\n\r\n#stock td, #stock th {\r\n  border: 1px solid #ddd;\r\n  padding: 8px;\r\n}\r\n\r\n#stock tr:nth-child(even){background-color: #f2f2f2;}\r\n\r\n#stock tr:hover {background-color: #ddd;}\r\n\r\n#stock th {\r\n  padding-top: 12px;\r\n  padding-bottom: 12px;\r\n  text-align: left;\r\n  background-color: #04AA6D;\r\n  color: white;\r\n}\r\n</style>\r\n</head>\r\n<body>\r\n\r\n<h1>A Stock Table</h1>";
builder.Append(style);
builder.Append("<table id=\"stock\"><tr><td>Stock Symbol</td><td>Stock Name</td><td>Stock Price</td></tr>");
using (var context = new DatabaseContext(optionsBuilder.Options))
{
    var stocks = context.Stock;
    foreach (Stock stock in stocks)
    {
        builder.Append($"<tr><td>{stock.Symbol}</td><td>{stock.Name}</td><td>{stock.Price}</td></tr>");
    }
}
builder.Append("</table></body></html>");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(builder.ToString());
pdf.SaveAs("stock.pdf");
$vbLabelText   $csharpLabel

上述C#代碼片段旨在創建顯示來源於SQLite資料庫的股票信息的HTML表,並隨後將其轉換為PDF文件。它使用Entity Framework Core程式庫與資料庫互動。 最初,它配置了一個DbContextOptionsBuilder來使用具有特定連接字串的SQLite。 然後代碼構建了一個嵌入CSS樣式的HTML字串以設計表格的外觀,創建具有標題的表格結構,查詢SQLite資料庫以獲取股票信息,將檢索到的數據填充到HTML表格中,並最終使用基於Chrome的PDF渲染器將HTML內容轉換為名為"stock.pdf"的PDF文件。生成的PDF將包含一個表格,呈現股票代號、名稱和價格。

輸出如

Sqlite C# .NET(開發者使用指南):圖2 - 股票表格輸出

結論

總之,在.NET中利用SQLite進行資料庫管理提供了一種輕量且靈活的解決方案。 本文探討了SQLite在.NET應用程式中的整合,展示了其關鍵功能和優勢。 提供的代碼展示了在.NET控制台應用程式中創建、連接和操作SQLite資料庫的實用步驟。 此外,它還強調使用Microsoft.Data.Sqlite和Entity Framework Core進行高效數據處理。 IronPDF的加入展示了如何從SQLite資料庫中無縫地生成PDF報告,增強應用程式的報告和數據分發能力。

IronPDF提供了多種授權選項,取決於開發者數量、地點、專案和再分發需求。 這些授權為永久性,並包含一年免費支持和更新。

常見問題解答

什麼是 SQLite,為什麼它在 .NET 開發中受歡迎?

SQLite 是輕量且自足的關係型資料庫引擎,由於其速度、可靠性和跨平台能力廣泛用於 .NET 開發。它可嵌入在應用程式中,而無需單獨的服務器元件。

我可以如何將 SQLite 整合到我的 .NET 應用程式中?

您可以透過安裝 Microsoft.Data.Sqlite NuGet 套件將 SQLite 整合到您的 .NET 應用程式中。這個套件提供 ADO.NET 介面,讓您能在 Console、桌面、網頁或行動應用程式中創建、連接及操作 SQLite 資料庫。

如何在 C# 中創建和連接到 SQLite 資料庫?

要在 C# 中創建和連接到 SQLite 資料庫,使用 SqliteConnection 類來建立連接。然後您可以執行 SQL 命令,以使用 SqlCommand 物件創建表格並操作資料。

我可以在 .NET 中使用 LINQ 查詢來操作 SQLite 嗎?

可以,您可以在 .NET 中透過使用 Entity Framework Core 來操作 SQLite。這能實現物件關係映射,讓您能夠在 DbContext 類別的 DbSet 屬性上執行 LINQ 查詢。

如何從 SQLite 資料庫資料生成 PDF 報告?

您可以使用 IronPDF 從 SQLite 資料庫資料生成 PDF 報告。通過轉換資料的 HTML 表現形式或直接使用資料庫內容,您能夠創建詳細的 PDF 報告並利用 IronPDF 的渲染功能進行匯出。

如何解決 .NET 應用程式中的常見 SQLite 問題?

可以通過確保 Microsoft.Data.Sqlite 套件的正確安裝,檢查 SQL 語法和驗證連接字串來解決 .NET 應用程式中的常見 SQLite 問題。除錯工具和日誌也能幫助識別和解決錯誤。

如何在 .NET 專案中安裝和使用 PDF 庫?

要在 .NET 專案中安裝如 IronPDF 的 PDF 庫,可在套件管理器控制台中執行 Install-Package IronPDF。安裝後,IronPDF 可讓您使用其豐富的 API 來創建、編輯和閱讀 PDF 文件。

使用 SQLite 搭配 .NET 有哪些優勢?

使用 SQLite 與 .NET 提供了簡單性、無需獨立服務器、跨平台支持和可靠性能等優勢。它非常適合輕量應用程式,並且可以透過 Microsoft.Data.Sqlite 等庫輕鬆整合。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me