Sqlite在C#中的應用

 在 .NET 裏面使用 SQLite, 我這裏使用的wrapper是 System.Data.SQLite,它只需要一個dll,接口符合ADO.Net 2.0的定義,性能也不錯,NHibernate用的也是它,目前支持ADO.NET 3.5了,支持集成在 VS2005 和 VS2008裏面,而且支持wince,是個亮點

因爲符合ADO.NET的規範,所以使用方式,基本和 SqlClient, OleDb等原生的一致

using System.Data;
using System.Data.SQLite;
//...

using (SQLiteConnection cn = new SQLiteConnection(
    "Data Source=Test.db3;Pooling=true;FailIfMissing=false")
    )

//Pooling設置爲true時,SQL連接將從連接池獲得,如果沒有則新建並添加到連接池中,默認是true。
//FailIfMissing默認爲false,如果數據庫文件不存在,會自動創建一個新的,若設置爲true,將不會創建,而是拋出異常信息。


{
    //在打開數據庫時,會判斷數據庫是否存在,如果不存在,則在當前目錄下創建一個
    cn.Open();

    using (SQLiteCommand cmd = new SQLiteCommand())
    {
        cmd.Connection = cn;

        //建立表,如果表已經存在,則報錯
        cmd.CommandText = "CREATE TABLE [test] (id int, name nvarchar(20))";
        cmd.ExecuteNonQuery();

        //插入測試數據
        for (int i = 2; i < 5; i++)
        {
            cmd.CommandText = string.Format("INSERT INTO [test] VALUES ({0}, '杜思波技術討論區域')", i);
            cmd.ExecuteNonQuery();
        }

        for (int i = 5; i < 10; i++)
        {
            cmd.CommandText = string.Format("INSERT INTO [test] VALUES ({0}, 'English Test')", i);
            cmd.ExecuteNonQuery();
        }

        //讀取數據
        cmd.CommandText = "SELECT * FROM [test]";
        using (SQLiteDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
        {
            while (dr.Read())
            {
                Console.WriteLine("第{0} 條:{1}", dr.GetValue(0), dr.GetString(1));
            }
        }
    }
}

 

 

在C#中使用SQLite


1、通過Add References引用SQLite ADO .NET安裝目錄的bin目錄下的System.Data.SQLite.DLL。

2、創建數據庫文件:因爲始終是個0字節文件,應該利用IO也可以(?!)。

System.Data.SQLite.SQLiteConnection.CreateFile(datasource);

 

3、連接數據庫

System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection(connectionString);

connectionString中包含了數據庫的一些配置信息,比如數據庫文件,數據庫打開的密碼等,可以利用System.Data.SQLite.SQLiteConnectionStringBuilder來輔助創建connectionString

4、創建表、讀取數據等和Access或MS SQL沒多大區別了

 
            //創建一個數據庫文件
            string datasource="h:/test.db";
            System.Data.SQLite.SQLiteConnection.CreateFile(datasource);
            
//連接數據庫
            System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection();
            System.Data.SQLite.SQLiteConnectionStringBuilder connstr 
= new System.Data.SQLite.SQLiteConnectionStringBuilder();
            connstr.DataSource 
= datasource;
            connstr.Password 
= "admin";//設置密碼,SQLite ADO.NET實現了數據庫密碼保護
            conn.ConnectionString = connstr.ToString();            
            conn.Open();
            
//創建表
            System.Data.SQLite.SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand();
            
string sql = "CREATE TABLE test(username varchar(20),password varchar(20))";
            cmd.CommandText
=sql;
            cmd.Connection
=conn;
            cmd.ExecuteNonQuery();
            
//插入數據
            sql = "INSERT INTO test VALUES('ekinglong','mypassword')";
            cmd.CommandText 
= sql;
            cmd.ExecuteNonQuery();
            
//取出數據
            sql = "SELECT * FROM test";
            cmd.CommandText 
= sql;
            System.Data.SQLite.SQLiteDataReader reader 
= cmd.ExecuteReader();
            StringBuilder sb 
= new StringBuilder();
            
while (reader.Read())
            
{
                sb.Append(
"username:").Append(reader.GetString(0)).Append("/n")
                .Append(
"password:").Append(reader.GetString(1));
            }

            MessageBox.Show(sb.ToString());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章