65.9K
CodeProject 正在变化。 阅读更多。
Home

在 C# 应用程序中使用 SQLite

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.51/5 (65投票s)

2007年12月16日

CPOL

3分钟阅读

viewsIcon

998921

downloadIcon

82438

SQLite 非常适合内存受限的系统,如 WinCE、Palm、智能手机、嵌入式设备以及普通的单用户桌面应用程序。

引言

SQLite 是一种小型、快速且可嵌入的数据库,其中数据库引擎和接口组合成一个单独的库。它还能够将所有数据存储在单个文件中。因此,如果您的应用程序需要一个独立的数据库,SQLite 可能是您的完美选择。当然,选择 SQLite 还有其他原因,包括

  • SQLite 具有较小的内存占用空间,并且只需要一个库来访问数据库,使其成为嵌入式数据库应用程序的理想选择。
  • SQLite 已被移植到许多平台,甚至可以在 Windows CE 和 Palm OS 上运行。
  • SQLite 符合 ACID 标准,满足所有四个标准 - 原子性、一致性、隔离性和持久性。
  • SQLite 实现了 ANSI-92 SQL 标准的大部分子集,包括视图、子查询和触发器。
  • 没有额外的数据库驱动程序问题,也不需要 ODBC 配置。只需将库和数据文件包含在您的应用程序中即可。
  • SQLite 具有 C/C++、PHP、Perl、Python、Tcl 等的本机语言 API。C# 的本机 API 仍然不存在。

Using the Code

要在 C# 应用程序中使用 SQLite,您需要从此处下载第三方免费的 ADO.NET 数据提供程序 (SQLite.NET.0.21_x68_dll.zip)。

Screenshot - Executable

图 1:演示 C# SQLite 应用程序。

我们的演示应用程序使用 SQLite 数据库在单个表 – mains 中存储 iddescription 值对。我们将在此表中显示一个网格的内容,并添加了添加/删除和修改表中记录的功能。要设置系统,请按照以下步骤操作

  1. 解压缩档案,并将 *.dll 文件放入 Binary 文件夹。

  2. 通过“项目 -> 添加引用”在您的 .NET 应用程序中使用 SQLite.NET.dll

  3. 在您的 *.cs 文件的 using 指令声明区域中添加 Using Finisar.SQLite;

  4. 声明以下 private 字段以在您的应用程序中使用

    private SQLiteConnection sql_con;
    private SQLiteCommand sql_cmd;
    private SQLiteDataAdapter DB;
    private DataSet DS = new DataSet();
    private DataTable DT = new DataTable();
  5. 创建一个函数来设置连接字符串。 DemoT.db 是单个数据文件的名称。它已经有一个表 – mains。 Version (=3) 是数据库引擎的版本。

    private void SetConnection() 
    { 
    sql_con = new SQLiteConnection
    	("Data Source=DemoT.db;Version=3;New=False;Compress=True;"); 
    } 
  6. 创建一个通用函数 ExecuteQuery,以执行创建命令查询。

    private void ExecuteQuery(string txtQuery) 
    { 
    SetConnection(); 
    sql_con.Open(); 
    sql_cmd = sql_con.CreateCommand(); 
    sql_cmd.CommandText=txtQuery; 
    sql_cmd.ExecuteNonQuery(); 
    sql_con.Close(); 
    }
  7. 现在创建一个 LoadData 函数来访问 SQLite 数据库并从 mains 表检索数据并填充数据集。请参考以下代码

    private void LoadData() 
    { 
    SetConnection(); 
    sql_con.Open(); 
    sql_cmd = sql_con.CreateCommand(); 
    string CommandText = "select id, desc from mains"; 
    DB = new SQLiteDataAdapter(CommandText,sql_con); 
    DS.Reset(); 
    DB.Fill(DS); 
    DT= DS.Tables[0]; 
    Grid.DataSource = DT; 
    sql_con.Close(); 
    }
  8. 要向表中添加/编辑/删除条目,只需将所需的查询传递给已创建的 ExecuteQuery 函数。请参见以下代码示例

    private void Add()
    {
    string txtSQLQuery = "insert into  mains (desc) values ('"+txtDesc.Text+"')";
    ExecuteQuery(txtSQLQuery);            
    }

要管理 SQLite 数据库,一个开源 SQLite GUI 数据库浏览器实用程序非常有用。可以从此处下载。

结论

那么 SQLite 是否应该用于所有数据库驱动的应用程序?不。

像所有数据库一样,SQLite 也有其缺点列表。它不适用于客户端服务器应用程序或作为网络数据库。它不太适合多用户场景,并且在通过网络同时访问时可能会出现严重的文件锁定问题。出于同样的原因,SQLite 不适合多线程或多进程应用程序数据库访问场景。

总而言之,SQLite 非常适合内存受限的系统,如 WinCE、Palm、智能手机、嵌入式设备以及普通的单用户桌面应用程序,在这些应用程序中,它的小内存占用空间、单个库及其复制和粘贴部署功能使其具有明显的优势。

先决条件

  1. Visual Studio .NET 2003 (C#)
  2. SQLite (www.sqlite.org)

历史

  • 2007 年 12 月 16 日:首次发布
© . All rights reserved.