C#对SQLite的常用操作

来源:互联网 发布:js中实现继承 编辑:程序博客网 时间:2024/05/29 02:13

Author: Kagula

Date: 2013-2-18

 

环境

[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官网下载地址

http://www.sqlite.org/download.html

 

原创粉丝点击