從零開始用C#做產品:私人日記(12)SQLite入門

本節開始,我們將涉入一個重要的內容,資料庫程式設計。上節我們做了一個簡短的資料庫選型分析,確定了我們的資料庫使用SQLite,下面再來補充介紹下:

SQL是

Structured Query Language的縮寫,結構化查詢語言,主要用於資料庫查詢。

lite在英文中的意思是簡化的、縮水的。

看名字大家也就知道了,這並不是一個很NB的資料庫。那為什麼要用它呢?

優點如下:

使用便捷、無需過多配置就可以使用;

符合SQL語法規範;

資料量不大的情況下可以獲得接近於大型資料庫的效能;

可跨平臺使用;

對我們這個小專案來說,足夠了。

我們先借助一款工具來認識下SQLite,這個工具的名字叫SQLite Studio,是一款開源軟體,下載地址我在文章下方有說明。

一、建立資料庫

對SQLite Studio的操作我就直接上動圖了,大家對照操作就好。

從零開始用C#做產品:私人日記(12)SQLite入門

資料庫的建立位置需要說明下,以免後面有同學跟不上節奏。我是直接建立到了程式執行的Debug目錄下。大家也可以建立到其它位置,然後複製過去,以後再使用開啟相應位置的資料庫,效果都一樣。

二、建立表

關係型資料庫的資料層次結構分三層:一個數據庫中可以建多個表,每個表可以建多個數據型別欄位。

資料庫表跟程式中類的層次有些類似,欄位則跟類中類變數的層次有些類似。

那我們現在需要建立一個分類資料的表,對應的就是Model。Category中的內容,這個我們之前都分析過了,現在直接參考此類建表。

從零開始用C#做產品:私人日記(12)SQLite入門

與其他資料庫不同的是,SQLite對資料的型別約束不是強制的,最終儲存到資料檔案中的,只有5種基本的資料型別:

從零開始用C#做產品:私人日記(12)SQLite入門

上面的表說明了宣告型別與基本型別的對照關係,宣告可以有很多種,最終資料庫儲存的只有5種形式。

比如我聲明瞭一個欄位為VCHAR(128),在SQLServer中,那欄位就不可能超過128個,而在SQLite中,是可以的,因為宣告只是給程式設計師看的,它僅僅是個說明,最終儲存的都是TEXT。

以上大家可以先了解下,有個印象。以後我們如果切換到其它資料庫,如果發現同樣的欄位定義,有些值在SQLite中可以插入,在SQLServer中卻報錯,為什麼呢?想想這部分內容就大概明白了。

好,現在一個定義了Category表的資料庫已經建好了。那我們在程式中要怎麼操作它呢?

。net集成了很多系統的類庫給我們使用,但程式要求是多樣的,系統給我們提供的也無法滿足我們的要求。我們要想在C#中使用它,就需要用到它開發好的類庫,我們一般把非系統提供的類庫成為第三方類庫。所以之前的教程記得有人留言說介紹下第三方類庫的使用,現在可以關注了。

SQLite的。net類庫,最初不是微軟開發的,是專門有個團隊在做的,有興趣的同學可以百度去他們官網查閱。

從零開始用C#做產品:私人日記(12)SQLite入門

然而微軟框架太混亂了。net Framework從2。0到4。7,然後又是。net core2。0-3。0,到現在。net 5,為了適應微軟的這些框架,sqlite出了很多版本,而且還要考慮32位、64位以及託管非託管等等,使得開發者經常會無所適從,這其實不怪sqlite,原因還是在微軟。不過好在微軟近幾年放棄了固守自己的地盤,大力發展開源、跨平臺,從。net core以後,微軟為了統一Sqlite的操作方式,自己開發了一套專門用於。net的sqlite,這使得sqlite使用起來方便了很多。

下面我們就用微軟的sqlite庫來操作sqlite資料庫。

一、新增Sqlite類庫

以前使用第三方類庫,我們都是到它的官網直接下載匹配的版本,然後再自己新增。現在我們有了新的選擇,使用NuGet包管理器。這點也是微軟的一大創舉,使用起來就像是手機裡的應用商店,想要什麼庫搜一下,然後安裝就好了。

進入方法:開啟VS,選單->NuGet包管理器->管理解決方案的NuGet程式包

從零開始用C#做產品:私人日記(12)SQLite入門

彈出NuGet介面,

在搜尋框中我們填入sqlite,就會發現Microsft。Data。Sqlite。Core,選中它,然後再右側的Diary。Win中勾選,再點安裝。

從零開始用C#做產品:私人日記(12)SQLite入門

安裝過程中可能會彈出確認對話方塊框,都開綠燈。

從零開始用C#做產品:私人日記(12)SQLite入門

安裝之後,我們可以在解決方案看到

從零開始用C#做產品:私人日記(12)SQLite入門

這樣就是安裝好了,也直接添加了引用。

二、呼叫Sqlite類庫

我們需要先測試下類庫和資料庫是否能夠正常執行,期望在程式開啟時就判斷一下資料庫是否正常,所以在MainForm中新增Load事件:

從零開始用C#做產品:私人日記(12)SQLite入門

然後新增如下程式碼:

private void MainForm_Load(object sender, EventArgs e){try{string filepath = string。Format(“{0}Diray。db”, Application。StartupPath);if (!System。IO。File。Exists(filepath)){MessageBox。Show(“資料庫檔案不存在”);}string connstring = string。Format(“Data Source={0};”, filepath);Microsoft。Data。Sqlite。SqliteConnection conn = new Microsoft。Data。Sqlite。SqliteConnection(connstring);conn。Open();if (conn。State == System。Data。ConnectionState。Open){MessageBox。Show(“資料庫連線測試成功”);conn。Close();}}catch (Exception ex){MessageBox。Show(ex。Message);}}

這裡有些新知識了,逐行講解下:

try{//。。。}catch (Exception ex){MessageBox。Show(ex。Message);}

這個try。。。catch學過C/C++的應該不陌生,異常捕獲。通俗的解釋,就是正常情況下肯定是按程式碼邏輯走的,但是凡事不怕一萬就怕萬一,萬一有異常情況,我先把它截獲,保證程式不會直接爆掉。生活中我們也經常看到這樣的事情,成年人的崩潰就在那一瞬間,我們雖然不能提前預知何時會發生、發生的原因是什麼?但不管是啥,心態別崩,先穩住情緒,然後我們再看情況處理,然後查漏補缺,避免此類情況再次發生。

string filepath = string。Format(“{0}Diray。db”, Application。StartupPath);

String。Format是C#程式設計中常用的方法,作用是組合字串,它支援可變引數。第一個引數是字串的格式,{0}表示第一個引數,{1}表示第二個引數。。。以此類推,後面就是跟了一堆的引數。

Application。StartupPath這個表示的是程式的啟動目錄。前面在建立資料庫的時候我把資料庫檔案Diary。db儲存到了程式的根目錄下,這個Application。StartupPath代表的就是程式根目錄,跟檔名字串一結合,就得到了資料庫檔案的全路徑。

string connstring = string。Format(“Data Source={0};”, filepath);

這個

connstring 就是資料庫連線字串,每個資料庫都有自己的方式來連線,按要求做就好。也是字串的拼接。

Microsoft。Data。Sqlite。SqliteConnection conn = new Microsoft。Data。Sqlite。SqliteConnection(connstring);conn。Open();

用指定的連線符建立一個

Sqlite的例項,然後開啟資料庫。這裡是最容易觸發異常的地方。

if (conn。State == System。Data。ConnectionState。Open){MessageBox。Show(“資料庫連線測試成功”);conn。Close();}

如果資料庫是開啟狀態,說明一切正常,然後關閉資料庫。

編譯通過後我們嘗試執行,結果真的發生了異常,被我們捕獲了。

從零開始用C#做產品:私人日記(12)SQLite入門

我們除錯發現,是在conn。Open時發生的。說實話,我也是第一次用Microsoft的sqlite,這種情況我也沒見過,不過遇到問題別慌,先百度查資料,基本上我們遇到的問題都是很多人曾經遇到過的。

查下來知道了,原來是我們還少添加了一個類庫:

Microsoft。EntityFrameworkCore。Sqlite。於是再次開啟Nuget,搜尋sqlite,找到Microsoft。EntityFrameworkCore。Sqlite。

這裡需要特別提醒的是關於sqlite,在Nuget管理器中可以看到很多名字類似的庫,同學們一定要瞪大眼睛,一個字都不能差,不然就會得到各種各樣的錯誤。

從零開始用C#做產品:私人日記(12)SQLite入門

繼續安裝

從零開始用C#做產品:私人日記(12)SQLite入門

包變成了兩個,這時再執行,測試透過。

從零開始用C#做產品:私人日記(12)SQLite入門

那麼接下來如何來做資料庫的增刪改查呢?我們下節繼續。

——————————————————————————

本教程儘量保證2天一更,專案原始碼已作為開源專案加入到Git,程式碼內容會隨教程實時更新,大家有興趣的話可以關注我,以獲得最及時的更新。私信:

私人日記

可以獲取Git的連結;

sqlitestudio

可以獲取sqlitestudio的連結;

C#基本語法大家在頭條搜尋“菜鳥c#”,個人感覺這個網站還可以。

大家閱讀過程中有哪些看不懂或未盡興的地方,可以在評論區留言,我會先記下來在後續的教程中找機會再說。

教程有幫助的話請大家幫忙關注、轉發、擴散,能不能開專欄還需要你們的支援!