跳至页脚内容
.NET 帮助

Sqlite C# .NET(开发者如何使用)

SQLite 是一个流行的、轻量级的、自包含的关系数据库引擎,被广泛用于各种数据访问应用和环境平台。 在 .NET 开发的背景下,SQLite 源代码是将可靠的数据库解决方案集成到你的系统应用程序中的绝佳选择。 本文将深入探讨 SQLite 事务的世界,探索其特性、优势,以及如何在你的 .NET 项目中有效使用它。

在 C&#35 中使用 SQLite 的方法

  1. 下载 SQLite 库
  2. 创建数据库并插入数据
  3. 使用读取器读取
  4. 使用Entity Framework和 LINQ 查询方法使用 SQLite
  5. 使用 IronPDF 生成 PDF 报告

什么是 SQLite?

SQLite 是一个流行的开源数据库引擎,可以嵌入到应用程序中,无需单独的服务器组件。 它快速、可靠且跨平台。 通过各种提供 ADO.NET 接口的库,可以在 .NET 项目应用中使用 SQLite。 其中一个库是 Microsoft.Data.SQLite。 这使你能够在 .NET 应用程序中使用 SQLite 作为数据源,无论它们是控制台、桌面、Web 或移动应用。你还可以使用Entity Framework核心执行对象关系映射,并使用 LINQ 查询你的 SQLite 数据库。

本文向您展示如何使用Microsoft.Data.Sqlite在.NET控制台应用程序中开发、连接和操作SQLite数据库。 你将学习如何:

  • 安装 Microsoft.Data.Sqlite NuGet 包
  • 创建 SQLite 连接并执行 SQL 命令
  • 使用数据读取器和参数创建并填充表
  • 使用数据读取器查询数据
  • 实现Entity Framework核心
  • 使用 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核心将表映射到类并使用 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方法将更改提交到数据库。 例如,以下代码插入了三个 Stocks 到数据库中:

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 功能 是其主要亮点,保留所有布局和样式。 它从网页内容生成 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核心库来与数据库交互。 最初,它配置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核心在高效数据处理中的应用。 IronPDF 的集成展示了如何无缝地从 SQLite 数据库 生成 PDF 报告,增强应用程序在报告和数据分发方面的能力。

IronPDF 提供了多种 许可选项,取决于开发人员数量、地点、项目和再分发需求。 许可证是永久的,并包括一年的免费支持和更新。

常见问题解答

什么是 SQLite,为什么它在 .NET 开发中非常受欢迎?

SQLite 是一个轻量级和独立的关系型数据库引擎,由于其速度、可靠性和跨平台能力,它在 .NET 开发中被广泛使用。它可以嵌入在应用程序中,而不需要单独的服务器组件。

如何将 SQLite 集成到我的 .NET 应用程序中?

您可以通过安装 Microsoft.Data.Sqlite NuGet 包将 SQLite 集成到您的 .NET 应用程序中。这提供了 ADO.NET 接口,允许您在控制台、桌面、Web 或移动应用中创建、连接和操作 SQLite 数据库。

如何在 C# 中创建和连接 SQLite 数据库?

要在 C# 中创建和连接 SQLite 数据库,使用 SqliteConnection 类建立连接。然后您可以执行 SQL 命令,通过 SqlCommand 对象创建表格和操作数据。

我可以在 .NET 中使用 LINQ 查询 SQLite 吗?

是的,您可以通过使用 Entity Framework Core 在 .NET 中对 SQLite 使用 LINQ 查询。这允许对象关系映射,使您能够在 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 文件。

在 .NET 中使用 SQLite 的优点是什么?

在 .NET 中使用 SQLite 的优点包括简单性、无需单独的服务器、跨平台支持和可靠的性能。它非常适合于轻量级应用程序,并且可以通过像 Microsoft.Data.Sqlite 这样的库轻松集成。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

Jacob 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。

Iron Support Team

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