最近接手了一個WPF專案,資料庫使用的MySQL,為了簡化生產環境部署流程,果斷選擇遷移到SQLite,由于原專案未使用ORM框架,導致很多SQL語法也得改,
SQLite基礎語法請參考該頁面
1.依賴包的更改
有兩個Nuget包可選: Microsoft.Data.Sqlite.Core / System.Data.SQLite,我都安裝試了下,除了型別大小寫不一致之外,功能幾乎一樣,由于老專案是.Net Framework 4.x,穩妥起見還是使用了后者,至于各種參考類型的更改,幾乎只需要將MySql開頭的型別名全域替換成SQLite的則可(記得刪掉MySQL的參考,確保只呼叫了SQLite相關類別庫)

2.資料庫連接
SQLite本身是一個基于檔案的資料庫系統,每個資料庫就是一個檔案,若檔案不存在它會自動創建,下面的示例代碼就是建立與運行目錄下test.sqlite檔案的連接
private const string connStr = "Data Source = {0}";
...
string dbName = "test.sqlite"; SQLiteConnection Connection = new SQLiteConnection(string.Format(connStr, dbName));
Connection.Open();
3.資料庫切換
雖然SQLiteConnection也提供了ChangeDatabase方法,但是不管用 o(╥﹏╥)o 得先手動釋放原來的連接資源,再建立新的連接
Connection?.Dispose(); Connection = new SQLiteConnection(string.Format(connStr, dbName)); Connection.Open();
4.建表差異
編碼集和資料引擎的部分肯定是不能要了,主鍵要將關鍵字放到對應欄位后面,自增則是去掉下劃線(大小寫依然不敏感),但是有一個需要注意的地方是:自增欄位得用integer,用int也行,但它不會自增
private const string SQL_CreateTable = @" create table if not exists `TestTable` ( id int not null auto_increment, name varchar(64) not null, primary key(id),
unique key(name) ) collate='utf8_general_ci' engine=InnoDB;";
//上面是MySQL建表陳述句
//下面是SQLite建表陳述句
private const string SQL_CreateTable = @" create table if not exists `TestTable` ( id integer PRIMARY KEY AUTOINCREMENT NOT NULL, name varchar(64) not null );";
5.刪表差異 - truncate 陳述句
SQLite不支持 truncate ,清空一張表需要先delete,然后再去sqlite_sequence表里洗掉對應表名的自增鍵
new SQLiteCommand(@"delete from tablename;", Connection).ExecuteNonQuery();
new SQLiteCommand(@"DELETE FROM sqlite_sequence WHERE name = 'tablename';", Connection).ExecuteNonQuery();
6.資料型別差異
MySqlDbType要更改為DbType,后者位于System.Data命名空間下,具體對照關系參考這個鏈接,圖中的Key值為MySqlDbType型別,Value為對應的DbType型別

7.邏輯運算子差異 -- &&符號
若不是接手這個專案,我都不知道MySQL居然能用 && 運算子,SQLite當然是不支持的,得改成 and 關鍵字
8.待補充,以后遇到其他問題再補充
翻譯
搜索
復制
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/552891.html
標籤:MySQL
上一篇:[MySQL 如何分析性能]
下一篇:返回列表
