[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
{
///
/// Interaction logic for MainWindow.xaml
///
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官网下载地址