C# 操作Sqlite本地数据库增删查改实例

首先:

需要引入System.Data.Sqlite.dll 和System.Data.Sqlite.Linq.dll 这两个

 

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SQLite;
using System.Data.SQLite.Linq;
using System.IO;
using System.Reflection;
using System.Data;
using System.Diagnostics;

namespace test
{
    //Sqlite操作类实例,缺少dispose方法
    public class SqliteIntance
    {
        public readonly String TABLENAME = "stock";
        private static SqliteIntance _stockNameCache = null;
        public static SqliteIntance instance
        {
            get
            {
                if (_stockNameCache == null)
                {

                    _stockNameCache = new SqliteIntance();

                }
                return _stockNameCache;
            }
        }

        //本地存放sqlite的路径
        String _dirpath = string.Empty;
        public String dirPath
        {
            get
            {
                if (_dirpath.Length == 0)
                {
                    var current_dir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                    _dirpath = Path.Combine(current_dir, "cache");
                    return _dirpath;
                }
                return _dirpath;
            }
        }

        //sqlite的路径
        public String databasePath
        {
            get
            {
                return Path.Combine(_dirpath, "stock.db");
            }
        }

        //本地什么都没有,根据路径创建目录和数据库,然后生成数据库,并打开链接
        SQLiteConnection _connection = null;
        public void OpenConnection()
        {
            if (!Directory.Exists(dirPath))
            {
                Directory.CreateDirectory(dirPath);
            }
            if (File.Exists(databasePath))
            {
                File.Delete(databasePath);
                SQLiteConnection.CreateFile(databasePath);
            }

            var connectionstring = new SQLiteConnectionStringBuilder() { DataSource = databasePath, ForeignKeys = true };
            _connection = new SQLiteConnection(connectionstring.ToString());
            _connection.Open();
            createTable();
        }

        //创建表
        public void createTable()
        {
            string sql = $"CREATE TABLE IF NOT EXISTS {TABLENAME} (ID INTEGER PRIMARY KEY  AUTOINCREMENT, CODE TEXT,NAME TEXT,MARKET TEXT)";
            updateData(sql);
        }

        //update表
        public void updateData(String sql)
        {
            var cmd = new SQLiteCommand() { Connection = _connection, CommandText = sql };
            cmd.ExecuteNonQuery();
        }

        //模糊查询
        public DataTable queryBykey(String query)
        {
            string sql = $@"SELECT CODE,NAME,MARKET FROM {TABLENAME} 
                WHERE CODE LIKE '%{query}%' 
                OR NAME LIKE '%{query}%'  
                LIMIT 30";
            return GetData(sql);
        }

        //根据sql查询,返回datatable
        public DataTable GetData(string sql)
        {
            var cmd = new SQLiteCommand { Connection = _connection, CommandText = sql };
            var da = new SQLiteDataAdapter { SelectCommand = cmd };
            var dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

        //插入数据,若有多条,要开启事务BeginTransaction
        public void InsertData()
        {
            SQLiteTransaction tan = _connection.BeginTransaction();
            try
            {
                SQLiteCommand cmd = new SQLiteCommand();
                String sql = $"insert into {TABLENAME} values(NULL, '600000','东方红','ZUDH')";
                cmd.Connection = _connection;
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
                tan.Commit();
            }
            catch (Exception ex)
            {
                tan.Rollback();
                throw ex;
            }
        }
    }
}

 

 

dll下载地址:

链接:https://pan.baidu.com/s/1mvrULUJtZgZ-Cw0a7-EJVQ 
提取码:unjg 

你可能感兴趣的:(C#)