• 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
    {
        /// 
        /// 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官网下载地址

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

  • 相关阅读:
    leetcode 1002. 查找共用字符
    界面控件DevExpress .NET应用安全 & Web API v23.1亮点:支持Swagger模式
    NLP 02 RNN
    设置RabbitMQ超时时间
    Android 12.0 framework关于systemUI定制之导航栏透明背景的功能实现
    解密Lawnchair:打造个性化极致的Android桌面体验
    查看Android App包名,查看keystore的信息,导出公钥
    算法day32|122,55,45
    Mysql发生死锁的原因,已经解决方法详解
    跌宕奔流2022,自动驾驶江湖风起雨涌,特斯拉、毫末、华为突破重围
  • 原文地址:https://blog.csdn.net/m0_62089210/article/details/126799873