C# 使用Microsoft.Data.Sqlite 的一些方法 System.Data.SQLite 包加密失敗


SQLite Encryption(加密)問題_碼農01號的博客-程序員宅基地 - 程序員宅基地 (cxyzjd.com)

SQLite Encryption(加密)問題_碼農01號的博客-程序員宅基地 - 程序員宅基地 (cxyzjd.com)

 

SQLite Encryption(加密)問題_碼農01號的博客-程序員宅基地

技術標簽: C#  sqlite  SQLite  

什么是SQLite?

SQLite是一個C語言實現的小型、快速、自包含、高可靠性、功能全面的SQL數據庫引擎。

起因:
剛好項目上有個需求,需要使用VS2019+.Net famework 4.6.1+sqlite完成數據層。

System.Data.SQLite庫

先嘗試了官方的System.Data.SQLite 包。

首先,使用VS2019創建.名字為 TestSqlite的.Net famework 4.6.1的控制台項目。

通過nuget安裝
![(https://img-blog.csdnimg.cn/20210703172632243.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E5MTM3NzcwMzE=,size_16,color_FFFFFF,t_70)

這個庫依賴了很多如linq、EF6等其他庫.個人不是很喜歡···有需要的朋友直接安裝是可以的。

Stub.System.Data.SQLite.Core.NetFramework

這個庫沒有依賴項···這里推薦···
在這里插入圖片描述

通過nuget安裝后使用如下代碼成功運行。

using System; using System.Data.SQLite; namespace TestSqlite { internal class Program { private static void Main(string[] args) { string cs = "Data Source=TestSqlite.sqlite";//數據庫連接字符串 string stm = "SELECT SQLITE_VERSION()";//查看版本 var con = new SQLiteConnection(cs);//創建連接 con.Open(); var cmd = new SQLiteCommand(stm, con); string version = cmd.ExecuteScalar() .ToString();//查看版本 Console.WriteLine($"SQLite version: {version}"); Console.ReadKey(); } } } 

運行后成功,可以看到版本是3.35.5
在這里插入圖片描述
在bin文件夾下也生成了sqlite數據庫
在這里插入圖片描述

加密失敗

作為一個數據庫,沒有密碼是不行的。
於是我們在連接字符串加上password
在這里插入圖片描述
運行,報錯

System.IO.FileNotFoundException:“未能加載文件或程序集“System.Data.SQLite.SEE.License, Version=1.0.114.0, Culture=neutral, PublicKeyToken=433d9874d0bb98c5”或它的某一個依賴項。系統找不到指定的文件。”

在這里插入圖片描述
這個System.Data.SQLite.SEE(SQLite Encryption Extension) 是System.Data.SQLite 的官方 SQLite 加密擴展包。

沒錯···SQlite開源版本是加密收費的···購買需要2000$·····
在這里插入圖片描述

貧窮讓我另謀出路

曲線救國 :Microsoft.Data.Sqlite

經過資料查詢,發現微軟的Microsoft.Data.Sqlite 庫支持,所以再次進行嘗試。

首先,使用VS2019創建.名字為 TestSqlite的.Net famework 4.6的控制台項目。

通過NuGet安裝 Microsoft.Data.Sqlite.Core和 SQLitePCLRaw.bundle_e_sqlcipher
在這里插入圖片描述
在這里插入圖片描述

通過程序包管理器安裝

Install-Package Microsoft.Data.Sqlite.Core
另外我們需要安裝加密包
Install-Package SQLitePCLRaw.bundle_e_sqlcipher·

Dapper.Crud

個人比較喜歡Dapper,不喜歡的小伙伴可以使用自己的ORM,不用安裝這個,使用自己喜歡的方式創建表即可。

Install-Package Dapper.Crud 

安裝完成后使用如下代碼

using System; using System.Data; using Dapper; using Microsoft.Data.Sqlite; namespace TestSqlite { internal class Program { private static void Main(string[] args) { var connStr = @"Data Source=TestSqlite.sqlite;";//連接字符串 var conn = new SqliteConnectionStringBuilder(connStr) { Mode = SqliteOpenMode.ReadWriteCreate, Password = "password" }.ToString();//使用這個方式設置密碼,避免sql注入 var connection = new SqliteConnection(conn);//創建SQLite連接 if (connection.State == ConnectionState.Closed) { connection.Open(); var createTableSqlStr = @"CREATE TABLE if not exists ""Alarm"" ( ""Id"" INTEGER NOT NULL, ""AlarmName"" TEXT, ""AlarmTypeId"" INTEGER, PRIMARY KEY ( ""Id"" ) );"; var result = connection.Execute(createTableSqlStr);//使用Dapper執行sql語句創建表 Console.ReadKey(); } } } } 

運行后成功!
在這里插入圖片描述
這里有個需要注意的點:

在設置密碼創建數據庫后,需要使用ORM執行sql創建表,如果是空數據庫,是未加密的··可以直接打開。原因暫未可知。希望知道的大佬能告知

我們使用Navicat for SQLite 打開,如果出現以下彈窗,就說明加密成功了!
在這里插入圖片描述

使用Navicat for SQLite 打開加密數據庫

沒有Navicat的童鞋點這里下載安裝

替換sqlite3.dll

步驟如下:
打開Bin文件夾下的runtimes

在這里插入圖片描述
根據自己系統選擇文件夾x64還是x86
復制win-x64\native 下的e_sqlcipher.dll
在這里插入圖片描述
打開Navicat 的安裝目錄,將剛剛復制的e_sqlcipher.dll復制到該目錄下。
備份sqlite3.dll(將該dll復制到其他文件夾下),
然后將復制的e_sqlcipher.dll改名成 sqlite3.dll 替換掉原來的sqlite3.dll

設置密碼

在數據庫連接右鍵編輯連接–>高級–>設置數據庫文件位置–>勾選已加密–>設置密碼–>勾選保存密碼
在這里插入圖片描述
雙擊連接數據庫,連接成功!!
在這里插入圖片描述

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/q913777031/article/details/118439760


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM