【C#.net】SQLite数据库入门:创建、访问和加密数据库
				
									
					
					
						|  | 
							admin 2025年1月26日 9:40
								本文热度 4539 | 
					
				 
				SQLite是一个极其轻量化的数据库系统,它使用起来非常简单,无需安装和配置服务器,程序直接从磁盘的数据库文件上读取数据即可。特别适合手机应用或小型的桌面软件使用。下面来详细介绍如何使用SQLite。在环境变量的系统变量中的path里添加一个路径:D:\SQLite,即sqlite3.exe文件所在的路径。添加环境变量后,在命令行里输入:sqlite3,出现如下图所示的提示,说有配置成功。虽然不需要借助其它工具也可以在命令行里直接使用sqlite,但是这种操作方式不怎么友好,特别是对于初学者。目前有许多辅助工具使得操作sqlite更为方便,例如SQLiteSpy、sqlcipher等等。如果需要这些工具,可以自行百度搜索获取。使用SQLiteSpy可以很方便地创建一个数据库,如下图所示,点击Fileànew Database就会弹出选择数据库保存的文件夹和名称的对话框,选择路径,并输入数据库名称,例如mydatabase.db,确定后就已经在指定位置创建好一个数据库。如果要创建一个数据表,则在右侧的文本框里输入SQL语句,然后选择菜单Execute-->Execute SQL即可。如下图所示:在visual studio中的nuget程序包管理中搜索并安装Microsoft.Data.Sqlite.Core。使用下面的代码访问上面数据库中的example数据表 string query = "SELECT * FROM example"; 
 string connectionString = $"Data Source=D:\\SQLite\\testDatabase.db";
 var connection = new SqliteConnection(connectionString);
     connection.Open();
     using (var command = new SqliteCommand(query, connection))
     {
         using (var reader = command.ExecuteReader())
         {
             while (reader.Read())
             {
                 string name = reader.GetString(1); // 或者使用reader["data"]
                 Console.WriteLine($"Name: {name}");
             }
         }
     }
     connection.Close();
 }
通过上面的操作,我们已经实现了数据库的创建和读写,但是还有一个最重要的问题——安全。用上面的操作方法创建出来的数据库不需要密码就可以查看所有数据,这对于重要的数据显然是不安全的,那应该如何给sqlite数据库加密呢?首先要在Visual studio中的nuget中安装sqlcipher。安装好sqlcipher后,找到项目目录下的packages\SQLitePCLRaw.lib.e_sqlcipher.2.1.10\runtimes文件夹,在runtimes文件夹里,有多个子文件夹,需要根据自己电脑的操作系统选择相应文件夹里的e_sqlcipher.dll文件,复制该文件到程序运行的文件夹中去(例如,调试时对应的运行文件夹是bin\debug)。接下来,用C#代码创建一个带密码的空白数据库文件,然后把已有的未加密的数据库的数据全部搬迁到这个带密码的空白数据库文件中。以下面这个方法实现: public  void CreateEncryptedDatabase(string plaintextDbPath, string encryptedDbPath, string encryptionKey)
{
    //创建一个新的加密数据库文件
    using (var connection = new SqliteConnection(new SqliteConnectionStringBuilder()
    {
        DataSource = encryptedDbPath,
        Password = encryptionKey
    }.ToString()))
    {
        connection.Open();
       //此处可添加数据库的其余操作
        connection.Close();
    }
    // 连接到原来没有密码的数据库,并导出数据到加密的数据库中去
    using (var connection = new SqliteConnection(new SqliteConnectionStringBuilder()
    {
        DataSource = plaintextDbPath
    }.ToString()))
    {
        connection.Open();
        using (var command = new SqliteCommand($"ATTACH DATABASE '{encryptedDbPath}' AS encrypted KEY '{encryptionKey}';" +
            $"SELECT sqlcipher_export('encrypted');" +
            $"DETACH DATABASE encrypted;", connection))
        {
            command.ExecuteNonQuery();
        }
        connection.Close();
    }
}
通过上面这个方法,就创建出了一个带密码的sqlite数据库文件。访问这个数据库时,可用下面这段示例代码: public void read(string encryptedDbPath, string encryptionKey)
 {
     string query = "SELECT * FROM example"; // 替换your_table_name为你的表名
     using (var connection = new SqliteConnection(new SqliteConnectionStringBuilder()
     {
         DataSource = encryptedDbPath,
         Password = encryptionKey
     }.ToString()))
     {
         connection.Open();
         using (var command = new SqliteCommand(query, connection))
         {
             using (var reader = command.ExecuteReader())
             {
                 while (reader.Read())
                 {
                            
                     string name = reader.GetString(1); // 或者使用reader["data"]
                     Console.WriteLine($"Name: {name}");
                 }
             }
         }
         connection.Close();
     }
 }
至此,使用SQLite创建、访问和加密数据库的工作就全部完成了。
该文章在 2025/1/26 9:40:53 编辑过