C#对SQLite的常用操作

环境

[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值