加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

WPF操作SQLite

发布时间:2020-12-12 19:22:08 所属栏目:百科 来源:网络整理
导读:IDE:VS2017 community 通过NuGet获取SQLite SQLite增、删、改、查: using System;using System.Collections.Generic;using System.Data.SQLite;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windo

IDE:VS2017 community

通过NuGet获取SQLite




SQLite增、删、改、查:

using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;

namespace HelloSQLite
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        string DBPath = "Data Source=" + AppDomain.CurrentDomain.BaseDirectory + @"HelloSQLite.db";
        private SQLiteConnection DBConnection = null;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void tbSQLiteOpen_Click(object sender,RoutedEventArgs e)
        {
            DBConnection = new SQLiteConnection(DBPath);
            DBConnection?.Open();
        }

        private void tbSQLiteCreateTable_Click(object sender,RoutedEventArgs e)
        {
            int ret = -1;
            string sql;
            bool tableExists = false;
            SQLiteCommand cmd = new SQLiteCommand();

            cmd.Connection = DBConnection;

            /* 表是否存在 */
            sql = "SELECT * FROM sqlite_master WHERE type='table' and name='persons'";
            cmd.CommandText = sql;
            using (SQLiteDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                {
                    tableExists = true;
                }
            }

            /* 表不存在,则创建表 */
            if (!tableExists)
            {
                sql = "CREATE TABLE IF NOT EXISTS persons(id INTEGER PRIMARY KEY,name VARCHAR(20),age INTEGER,address VARCHAR(100),data BLOB);";
                cmd.CommandText = sql;
                ret = cmd.ExecuteNonQuery();
                Console.WriteLine($"创建表返回: {ret}");
            }
        }

        private void tbSQLiteInsert_Click(object sender,RoutedEventArgs e)
        {
            int ret = -1;
            string sql;
            byte[] datas = new byte[] { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
            SQLiteCommand cmd = new SQLiteCommand();

            cmd.Connection = DBConnection;

            /* 插入一条数据 */
#if DEBUG // 方式一
            sql = $"INSERT INTO persons(id,name,age,address,data) VALUES (@id,@name,@age,@address,@data)";

            cmd.CommandText = sql;
            cmd.Parameters.Add(new SQLiteParameter("@id",2));
            cmd.Parameters.Add(new SQLiteParameter("@name","王五"));
            cmd.Parameters.Add(new SQLiteParameter("@age",12));
            cmd.Parameters.Add(new SQLiteParameter("@address","中国北京"));
            cmd.Parameters.Add(new SQLiteParameter("@data",datas));
#else // 方式二
            sql = string.Format($"INSERT INTO persons(id,address) VALUES ('{1000}','{"张三"}','{20}','{"中国-广东深圳坂田"}')");
            cmd.CommandText = sql;
#endif
            ret = cmd.ExecuteNonQuery();
            Console.WriteLine($"{ret}行被插入!");
        }

        private void tbSQLiteDelete_Click(object sender,RoutedEventArgs e)
        {
            int ret = -1;
            string sql;
            SQLiteCommand cmd = new SQLiteCommand();

            cmd.Connection = DBConnection;

            /* 删除数据 */
            sql = "DELETE FROM persons";
            cmd.CommandText = sql;
            ret = cmd.ExecuteNonQuery();

            Console.WriteLine($"{ret}行被删除!");
        }

        private void tbSQLiteUpdate_Click(object sender,RoutedEventArgs e)
        {
            int ret = -1;
            string sql;
            SQLiteCommand cmd = new SQLiteCommand();

            cmd.Connection = DBConnection;

            /* 更新数据 */
            sql = "UPDATE persons SET age=21 WHERE id=2";
            cmd.CommandText = sql;
            ret = cmd.ExecuteNonQuery();

            Console.WriteLine($"{ret}行被修改!");
        }

        private void tbSQLiteQuery_Click(object sender,RoutedEventArgs e)
        {
            string sql;
            SQLiteCommand cmd = new SQLiteCommand();

            cmd.Connection = DBConnection;

            /* 查询数据库 */
            sql = "select * from persons";
            cmd.CommandText = sql;

            using (SQLiteDataReader reader = cmd.ExecuteReader())
            {
                Console.WriteLine($"Depth: {reader.Depth}");
                Console.WriteLine($"HasRows: {reader.HasRows}");
                Console.WriteLine($"Column count: {reader.FieldCount}");
                Console.WriteLine($"RecordsAffected: {reader.RecordsAffected}");
                Console.WriteLine($"StepCount: {reader.StepCount}");
                Console.WriteLine($"VisibleFieldCount: {reader.VisibleFieldCount}");
                Console.WriteLine($"*************************************************");
                while (reader.Read())
                {
                    Console.WriteLine($"ID: {reader.GetInt32(0)} {Environment.NewLine}" +
                                    $"Name: {reader.GetString(1)} {Environment.NewLine}" +
                                    $"Age: {reader.GetInt32(2)} {Environment.NewLine}" +
                                    $"Address: {reader.GetString(3)} {Environment.NewLine}");
                    
                    long size = reader.GetStream(4).Length;// 获取第4列长度
                    byte[] d = new byte[size];
                    long len = reader.GetBytes(4,d,(int)size);
                    Console.WriteLine(StringHelper.Bytes2HexString(d));
                    Console.WriteLine($"=======================================================================");
                }
            }
        }

        private void tbSQLiteClose_Click(object sender,RoutedEventArgs e)
        {
            DBConnection?.Close();
        }
    }
}


byte数组转十六进制字符串

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloSQLite
{
    public class StringHelper
    {
        public static string Bytes2HexString(byte[] bytes)
        {
            string hexString = string.Empty;

            if (null != bytes)
            {
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < bytes.Length; i++)
                {
                    sb.Append(bytes[i].ToString("X2") + " ");
                }

                hexString = sb.ToString();
            }
            return hexString;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读