自己開發程式的時候,想用資料庫又不希望花一大筆錢
常常會使用SQLite,一個輕量級的嵌入式資料庫系統(僅單一檔案)由於.net原生並不支援SQLite
可以去System.Data.SQLite找到在公開的函式庫
注意如果是x64的程式,則需要使用x64版本的函式庫,無法混用
在每次使用資料庫的時候,都需要建立與相關資料庫的連結
private SQLiteConnection ConnectDatabase()
{
string path = "Test.db";
string password = "Password";
SQLiteConnection connection;
if (!File.Exists(_databasePath))
{
/// for non-exist database, create it
SQLiteConnection.CreateFile(path);
connection = new SQLiteConnection(
"Data Source = " + path);
connection.Open();
connection.ChangePassword(password);
}
else
{
/// for exist database, connect it
connection = new SQLiteConnection(
"Data Source = " + path);
connection.SetPassword(password);
connection.Open();
}
return connection;
}
這邊要注意的是,由於SQLite本身並沒有支援資料庫加密
有關Password的功能(
所以製作出來的加密資料庫並不能被其他的SQLite應用讀取
(例如Firefox的附加元件SQLite Manager)
所以如果不打算加密,建議將
在連結之後,就可以透過該連結,執行SQL的命令
private void RunCommand(
SQLiteConnection connection, string commandText)
{
SQLiteCommand command =
new SQLiteCommand(connection);
command.CommandText = commandText;
command.ExecuteNonQuery();
}
除了不需要回傳值的命令(例如CREATE TABLE)以外
SQL最重要的當然是Query的指令
private List RunQueryCommand(
SQLiteConnection connection, string commandText)
{
List<string> result = new List<string>();
SQLiteCommand command =
new SQLiteCommand(connection);
command.CommandText = commandText;
using (SQLiteDataReader queryResult =
command.ExecuteReader())
{
/// read one row one time
while (queryResult.Read())
{
/// change index to get different column
result.Add(queryResult.GetValue(0 )
.ToString());
}
}
return result;
}
當然,在使用完畢後一定要記得將連結中止,否則資料庫檔案會被鎖住
private void DisconnectDatabase(
SQLiteConnection connection)
{
connection.Close();
}
另外,讀取資料庫的時候,如果不能肯定資料表是否存在
則需要先做一個檢查,否則會跳出例外狀況
(當然也是可以直接用try catch將Command包住,端看習慣)
private bool IsTableExist(
SQLiteConnection connection, string name)
{
return connection.GetSchema("Tables")
.Select("Table_Name = '" + name + "'")
.Length > 0;
}
--
參考資料
SQLite 簡介
System.Data.SQLite
C sharp or .Net 使用sqlite 設定
SQLite Manager
SQL語法教學
Check if table exists
資料來源:http://codingjames.blogspot.com/2010/12/csqlite.html
沒有留言:
張貼留言