Bootstrap

WPF--->使用SqLite操作db文件

SqLite通过NuGet包的基础使用

基础安装

在WPF中使用SQLite,先安装System.Data.SqLite.Core包
创建类进行操作,示例如下

封装操作db文件基础类

创建对*.db文件的操作类,封装基本的操作,db文件通过手动创建或者工具创建都可以

  public class MySqLite
    {
        // 数据库文件夹
        static string DbPath = Path.Combine(@"./", @"Database");

        //与指定的数据库(实际上就是一个文件)建立连接
        private static SQLiteConnection CreateDatabaseConnection(string dbName = null)
        {
            if (!string.IsNullOrEmpty(DbPath) && !Directory.Exists(DbPath))
                Directory.CreateDirectory(DbPath);
            dbName = dbName == null ? "database.db" : dbName;
            var dbFilePath = Path.Combine(DbPath, dbName);
            return new SQLiteConnection("DataSource = " + dbFilePath);
        }

        // 使用全局静态变量保存连接
        private static SQLiteConnection connection = CreateDatabaseConnection();

        // 判断连接是否处于打开状态
        private static void Open(SQLiteConnection connection)
        {
            if (connection.State != System.Data.ConnectionState.Open)
            {
                connection.Open();
            }
        }

        //执行非查询SQL语句代码,适用于建表、增删改等
        public static void ExecuteNonQuery(string sql)
        {
            // 确保连接打开
            Open(connection);

            using (var tr = connection.BeginTransaction())
            {
                using (var command = connection.CreateCommand())
                {
                    command.CommandText = sql;
                    command.ExecuteNonQuery();
                }
                tr.Commit();
            }
        }

        public static void ExecuteQuery(string sql)
        {
            // 确保连接打开
            Open(connection);

            using (var tr = connection.BeginTransaction())
            {
                using (var command = connection.CreateCommand())
                {
                    command.CommandText = sql;

                    // 执行查询会返回一个SQLiteDataReader对象
                    var reader = command.ExecuteReader();

                    //reader.Read()方法会从读出一行匹配的数据到reader中。注意:是一行数据。
                    while (reader.Read())
                    {
                        // 有一系列的Get方法,方法的参数是列数。意思是获取第n列的数据,转成Type返回。
                        // 比如这里的语句,意思就是:获取第0列的数据,转成int值返回。
                        var time = reader.GetInt64(0);
                    }
                }
                tr.Commit();
            }
        }

        // 因为SQLite是文件型数据库,可以直接删除文件。但只要数据库连接没有被回收,就无法删除文件。
        public static void DeleteDatabase(string dbName)
        {
            var path = Path.Combine(DbPath, dbName);
            connection.Close();

            // 置空,手动GC,并等待GC完成后执行文件删除。
            connection = null;
            GC.Collect();
            GC.WaitForPendingFinalizers();
            File.Delete(path);
        }

进行使用

        static void Main(string[] args)
        {
            MySqLite.ExecuteNonQuery("create table if not exists table1(id int, name varchar(30),age int)");
            MySqLite.ExecuteNonQuery(" insert into table2 values(2,'TOM',23)");
           Console.Read();
        }

SqLite

;