C#與資料庫SQLite:在C#專案中使用SQLite
下面這兩個是不同的:
1.System.Data.SQLite ( http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki)
2.SQLite(https://www.sqlite.org/download.html)
儘管是一個網站,但是,是兩個產品。前者可用於C#,後者可以直接使用。前者的安裝目錄包含的檔案很多,後者包含很少。詳細差別可以自行查詢。
在C#專案中使用的是System.Data.SQLite,所以,首先要下載並安裝System.Data.SQLite 。
然後在專案中新增System.Data.SQLite.dll:專案右鍵——新增——引用——瀏覽——安裝目錄——System.Data.SQLite.dll——確定。如下圖:
新增完成後,在專案的引用目錄中會出現System.Data.SQLite,如下圖:
這時候就可以新建專案使用SQLite了。需要using System.Data.SQLite;此時在專案的bin/Debug資料夾中會有System.Data.SQLite.dll和System.Data.SQLite.dll.config。
C#中資料庫訪問使用的是ADO.NET模型。使用SQLite也不例外。
(如果有問題,可以從System.Data.SQLite的安裝目錄中複製System.Data.SQLite.dll.config到專案的資料夾中,和上圖中的AllForms、Properties等在相同資料夾中)
(上圖中程式碼使用的並不是SQLite資料庫,而是SQL Server資料庫)
在C#專案中建立資料庫:
var fileName = "D:/testDB.db";
SQLiteConnection.createFile(fileName);
相應位置就出現了資料庫檔案。
這時候可以用SQLite的圖形介面管理工具驗證該資料庫。
成功建立資料庫。接下來在VS中C#專案裡連線該資料庫並建立一個表。
連線資料庫:
string databaseFileName = "D:/testDB.db";
string connectionString = "data source = " + databaseFileName;
SQLiteConnection dbConnection = new SQLiteConnection(connectionString);
dbConnection.Open();
此時出了些問題:
1.缺少SQLite.Interop.dll。
只要從SQLite的安裝目錄中的bin目錄下找到該檔案,並複製到專案目錄bin的debug中即可。
2.試圖載入格式不正確的程式。
原來這是64位應用32位產生的問題。就是平臺和軟體的版本不相容。我的電腦是64位的,我裝的System.Data.SQLite也是64位的,但是專案屬性——生成——平臺目標卻是Any CPU(首選32位),將平臺目標改為64位後,問題消失了。
建立一個表:
string[] colNames = new string[] { "ID", "Name", "Age", "Email" };
string[] colTypes = new string[] { "INTEGER", "TEXT", "INTEGER", "TEXT" };
string tableName = "table1";
string queryString = "CREATE TABLE IF NOT EXISTS " + tableName + "( " + colNames[0] + " " + colTypes[0];
for (int i = 1; i < colNames.Length; i++)
{
queryString += ", " + colNames[i] + " " + colTypes[i];
}
queryString += " ) ";
SQLiteCommand dbCommand = dbConnection.CreateCommand();
dbCommand.CommandText = queryString;
SQLiteDataReader dataReader = dbCommand.ExecuteReader();
成功連線資料庫並建立了一個表,用圖形介面管理工具,會看到:
可以在C#專案中建立資料庫、連線資料庫、建立表,其他操作還沒有測試。
也可以通過VS選單欄中的專案——管理NuGet程式包——瀏覽——System.Data.Sqlite——安裝
使用此方法時要注意專案的.NET Framework框架的版本,因為可能會出現添加了System.Data.Sqlite後在專案中卻不能使用Sqlite的問題,using找不到此型別。