环境
[1]Visual Studio 2010 Ultimate with SP1
正文
准备工作
从参考资料中下载SQLiteAdministrator工具,新建SQLite数据库文件“employees.s3db”,并添加表“employee”。
下面是建这张表所用的SQL语句
CREATETABLE [employee] (
[EMPLOYEE_ID]INTEGER NOT NULL PRIMARY KEYAUTOINCREMENT,
[EMPLOYEE_NAME]VARCHAR(32) NOT NULL,
[EMPLOYEE_AGE]INTEGER DEFAULT '0' NOT NULL
)
在WPF工程中的引用
第一步:从参考资料[2]中下载“SQLite-1.0.66.0-binaries.zip”文件并解压缩。
第二步:新建WPF工程并引入“..\bin\ManagedOnly\System.Data.SQLite.DLL”文件。在project中新建AppData文件夹添加已存在的item,把你刚才新建的SQLite文件加进项目里去,设置Item的“Copy to Output”属性为“Copy if newer”。
第三步:参考资料[4]下载“sqlite-dll-win32-x86-3071502.zip”文件解压出“sqlite3.dll”文件并放到系统文件夹下,例如:“C:\Windows\System32”路径
第四步:参考下面的C#源码,对数据库文件中的表进行list、添加、删除、修改操作。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Data.SQLite; using System.Data; using System.Data.Common; using System.Diagnostics; /** * Title:演示WPF4工程如何对SQLite数据库文件中的表进行操作 * Author:Kagula * Date:2013-02-18 * Remark:测试环境[1]WinXPSP3[2]VS2010SP1 * */ namespace testSQLiteInWPF { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { String datasource = "AppData\\employees.s3db"; SQLiteConnection conn = new SQLiteConnection(); public MainWindow() { InitializeComponent(); //连接SQLite数据库文件 SQLiteConnectionStringBuilder connstr = new SQLiteConnectionStringBuilder(); connstr.DataSource = datasource; conn.ConnectionString = connstr.ToString(); conn.Open(); //这里列出表记录 DataTable data = ExecuteDataTable("SELECT * FROM employee",null); foreach (DataRow dr in data.Rows) { StringBuilder sb = new StringBuilder(); sb.Append("ID=").Append(dr[0]); sb.Append(",Name=").Append(dr[1]); sb.Append(",Age=").Append(dr[2]); Debug.WriteLine(sb.ToString()); } } private void button1_Click(object sender, RoutedEventArgs e) { //这里演示如何插入一条新的记录,如果要插入多条记录需要使用“事务”机制来提高效率 //你可以调用ExecuteNonQuery函数来简化下面的代码 using (SQLiteCommand cmd = (SQLiteCommand)conn.CreateCommand()) { cmd.CommandText ="INSERT INTO employee(EMPLOYEE_NAME,EMPLOYEE_AGE)" + " VALUES (@NAME, @AGE)"; cmd.Parameters.AddWithValue("@NAME", "InsertedName"); cmd.Parameters.AddWithValue("@AGE", 99); cmd.ExecuteNonQuery(); } } private void button2_Click(object sender, RoutedEventArgs e) { //这里演示如何删除一条记录 SQLiteParameter param = new SQLiteParameter("@ID", 1); ExecuteNonQuery("DELETE FROM EMPLOYEE WHERE EMPLOYEE_ID=@ID", new SQLiteParameter[]{param}); } private void button3_Click(object sender, RoutedEventArgs e) { //这里演示如何修改一条记录,注意这里没有用字符串替换功能 String sql = "UPDATE EMPLOYEE SET EMPLOYEE_AGE=22 where EMPLOYEE_ID=2"; ExecuteNonQuery(sql,null); } int ExecuteNonQuery(string sql, SQLiteParameter[] parameters) { int affectedRows = 0; DbTransaction transaction = conn.BeginTransaction(); SQLiteCommand command = new SQLiteCommand(conn); command.CommandText = sql; if (parameters != null) { command.Parameters.AddRange(parameters); } affectedRows = command.ExecuteNonQuery(); transaction.Commit(); return affectedRows; } DataTable ExecuteDataTable(string sql, SQLiteParameter[] parameters) { DataTable data = new DataTable(); SQLiteCommand command = new SQLiteCommand(sql, conn); if (parameters != null) { command.Parameters.AddRange(parameters); } SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); adapter.Fill(data); return data; } } }
在Silverlight工程中的引用
(待写)
参考资料
[1]SQLite数据库文件管理工具
http://sqliteadmin.orbmu2k.de/
[2] System.Data.SQLite用于提供SQLite数据库文件访问的第三方工具
http://sqlite.phxsoftware.com/
[3]《SQLite大量插入的效率问题》
http://www.cnblogs.com/rader/articles/1543760.html
[4]SQLite官网下载地址