.NET 幫助

Sqlite C# .NET(開發人員如何運作)

Kannaopat Udonpant
坎納帕特·烏頓潘
2024年1月14日
分享:

SQLite是一個受歡迎、輕量且獨立的關聯式資料庫引擎,廣泛應用於各種資料存取應用程式和環境平台。 在 .NET 開發的背景下,SQLite 原始碼是一個在系統應用程式中整合可靠數據庫解決方案控制的絕佳選擇。 本文將深入探討SQLite交易的世界,探索其功能、優勢以及如何在您的.NET專案中有效地使用它。

如何在 C# 中使用 SQLite

  1. 下載 SQLite 庫

  2. 建立資料庫並插入數據

  3. 使用讀取器進行閱讀

  4. 使用 Entity Framework 和 LINQ 查詢方法來使用 SQLite

  5. 使用生成PDF報告IronPDF

什麼是 SQLite?

SQLite是一個受歡迎的開源資料庫引擎,可以嵌入應用程式中而不需要單獨的伺服器組件。 它是快速、可靠且跨平台的。 SQLite 可以通過提供 ADO.NET 介面的各種庫與 .NET 專案應用程式一起使用。 其中一個這些庫是Microsoft.Data.SQLite. 這允許您將 SQLite 作為 .NET 應用程式的資料來源,無論它們是控制台、桌面、網絡還是移動的應用程式。您還可以使用 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();
  // ...
}

using 語句確保連線在超出範疇時被關閉和釋放。 要執行 SQL 命令,您需要創建一個 SQLiteCommand 物件並將其與連接關聯。 您可以將 CommandText 屬性設置為您要執行的 SQL 語句,並可選擇性地向 Parameters 集合中添加參數。 然後,您可以調用 SQLiteCommand 物件的其中一種方法來執行命令,例如 ExecuteNonQuery、ExecuteScalar 或 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();
}

插入資料到表格

要將資料插入表格中,您可以使用相同的 SQLiteCommand 物件並將 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();
}

從 SQLite 讀取數據

要從資料表中讀取數據,您可以使用 SQLiteCommand 對象的 ExecuteReader 方法,並將 CommandText 屬性設置為 SELECT 語句。 這將返回一個SQLiteDataReader對象,允許您遍歷行並通過列名稱或索引訪問值。 您可以使用 Read 方法移動到下一行,並使用 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).ToString();
            string designation = reader.GetString(3).ToString();
            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).ToString();
            string designation = reader.GetString(3).ToString();
            Console.WriteLine($"{id}: {firstName} - {lastName} - {designation}");
        }
    }
}

輸出

此程式碼的輸出是:

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

查詢資料

如果您更喜歡使用 LINQ 查詢 SQLite 資料庫,可以使用 Entity Framework Core 將您的表映射到類別,並使用 LINQ 表達式進行查詢。 為此,您需要安裝 Microsoft.EntityFrameworkCore.Sqlite 套件,它依賴於 Microsoft.Data.Sqlite 套件。 您還需要創建一個繼承自 DbContext 並代表資料庫上下文的類別。 此類別必須有一個接受 DbContextOptions 參數的建構函式,並將其傳遞給基底建構函式。 它還必須為每個要映射到類的表設置一個 DbSet 屬性。 例如,以下程式碼定義了 Stock 類別和 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; }
}

要創建資料庫上下文,您需要使用 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();
  }

要將資料插入資料庫,您可以使用 DbSet 屬性的 Add 或 AddRange 方法,並傳遞您想要插入的物件。 您也可以使用 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();
    }
}

若要查詢資料,您可以使用 LINQ 方法或表達式在 DbSet 屬性上進行操作,並應用篩選、投影、彙總和其他操作。 查詢將會被翻譯成 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);
    }
}

假設我們有一個情境,需要建立一個包含股票清單的 PDF 文件。 我們可以輕鬆地使用IronPDF來做到這一點。

介紹 IronPDF

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

IronPDF 的HTML 轉 PDF 功能它的主要亮點是保留所有佈局和樣式。 它從網頁內容生成 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");
    }
}

安裝 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";

從包含庫存清單創建 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");

上述 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展示了如何無縫地生成PDF報告從 SQLite 資料庫提取資料,增強應用程式在報告和數據分發方面的功能。

IronPDF 提供各種授權選項,這取決於開發人員的數量、地點、項目和重新分配的需求。 這些授權是永久的,並包含一年免費支援和更新。

Kannaopat Udonpant
坎納帕特·烏頓潘
軟體工程師
在成為軟體工程師之前,Kannapat 在日本北海道大學完成了環境資源博士學位。在攻讀學位期間,Kannapat 也成為了車輛機器人實驗室的成員,該實驗室隸屬於生物生產工程學系。2022 年,他利用自己的 C# 技能,加入了 Iron Software 的工程團隊,專注於 IronPDF 的開發。Kannapat 珍視這份工作,因為他可以直接向負責撰寫大部分 IronPDF 程式碼的開發人員學習。除了同儕學習外,Kannapat 還享受在 Iron Software 工作的社交方面。當他不在撰寫程式碼或文件時,Kannapat 通常會在 PS5 上玩遊戲或重看《最後生還者》。
< 上一頁
C# 雙問號(它如何為開發人員工作)
下一個 >
Datatables .NET(開發人員如何運作)