C# 使用 SQLite 数据库

这里只讨论不安装的情况,只在项目中引用Dll。
从 SQLite 官网中下载带有 static 字样的 zip 包,比如我下载的是 sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip 。
解压后可以得到不少文件,其中也包含了安装文件 Install.exe,但是可以不安装,如果要使用 SQLite,最少需要两个 Dll:System.Data.SQLite.dll,SQLite.Interop.dll。如果需要用到 Linq 或 EntityFramework 的话,还需要 System.Data.SQLite.Linq.dll 和 System.Data.SQLite.EF6.dll。

不考虑 Linq 和 EntityFramework 的情况下,只需要引用 System.Data.SQLite.dll,然后保证在程序根目录下可以找到 SQLite.Interop.dll即可。

在程序根目录放置一个SQLite数据库文件(数据库文件路径其实可以是任意的)。System.Data.SQLite 中提供了 SQLiteConnection,SQLiteCommand,SQLiteDataAdapter。

private void InitSqlite()
{
    SQLiteConnection conn = new SQLiteConnection ("Data Source=test.db3");
    conn.Open();
    var table = conn.GetSchema( "tables");
    //获取数据库文件中的表结构
    TableDataGrid.ItemsSource = table.DefaultView;

    var cmd = new SQLiteCommand (@"select * from Demo", conn);
    SQLiteDataAdapter adapter= new SQLiteDataAdapter (cmd);
    DataSet ds = new DataSet ();
    adapter.Fill(ds);
    //获取表的列结构,通过查询所有来得到
    ColumnDataGrid.ItemsSource = ds.Tables[0].DefaultView;
    cmd.Dispose();
    conn.Close();
}

  

同样,执行创建数据库的SQL语句也都是可以的
private void CreateTable()
{
    SQLiteConnection conn = new SQLiteConnection ("Data Source=test.db3");
    conn.Open();
    var sqlStr = @"create table Demo([Id] int IDENTITY (1,1) PRIMARY KEY,[Pinyin] varchar(50) null)" ;
    SQLiteCommand cmd= new SQLiteCommand (sqlStr,conn);
    cmd.ExecuteNonQuery();
    cmd.Dispose();
    conn.Close();
}

  

SQLite数据库压缩
和 MDB 数据库一样,SQLite 数据库默认不会回收控件,进行大量的数据删除后,数据库文件的体积不会改变,要压缩数据库文件,可以执行 VACUUM 命令。
VACUUM 将会从头重新组织数据库。这将会使用数据库有一个空的“自由链表”, 数据库文件也会最小。
private void Compact()
{
    SQLiteConnection conn = new SQLiteConnection ( "Data Source=test.db3");
    conn.Open();
    SQLiteCommand cmd = new SQLiteCommand( "VACUUM" , conn);
    cmd.ExecuteNonQuery();
    cmd.Dispose();
    conn.Close();
}

  

 

posted @ 2014-12-16 16:56  fujinxiang  阅读(413)  评论(0编辑  收藏  举报