Addition, deletion, query and modification of SQLite database

 SQLite is an in-process library that implements a self-sufficient, serverless, zero-configuration, transactional SQL database engine. It is a zero-configuration database, which means that unlike other databases, you do not need to configure it in the system.

        Like other databases, the SQLite engine is not a standalone process and can be linked statically or dynamically according to application needs. SQLite directly accesses its storage files.

Using SQLite in the Visual Studio environment requires installing a third-party library: System.Data.SQLite, as shown below:

Helper class code

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.IO;

namespace WindowsFormsApp
{
    public static class SQLiteHelper
    {
        /// <summary>
        /// 链接套接字
        /// </summary>
        static SQLiteConnection m_dbConnection { get; set; }

        /// <summary>
        /// 生成连接字符串
        /// </summary>
        /// <returns></returns>
        private static string CreateConnectionString(string db)
        {
            SQLiteConnectionStringBuilder connectionString = new SQLiteConnectionStringBuilder();
            connectionString.DataSource = @"data/" + db;//此处文件名可以使用变量表示
            string conStr = connectionString.ToString();
            return conStr;
        }

        /// <summary>
        /// 连接到数据库
        /// </summary>
        /// <returns></returns>
        private static SQLiteConnection dbConnection(string db)
        {
            m_dbConnection = new SQLiteConnection(CreateConnectionString(db));
            m_dbConnection.Open();
            return m_dbConnection;
        }

        /// <summary>
        /// 创建数据库文件,如:text.db
        /// </summary>
        /// <param name="fileName">文件名</param>
        public static void CreateDBFile(string fileName)
        {
            string path = Environment.CurrentDirectory + @"/Data/";
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            string databaseFileName = path + fileName;
            if (!File.Exists(databaseFileName))
            {
                SQLiteConnection.CreateFile(databaseFileName);
            }
        }

        /// <summary>
        /// 在指定数据库中创建一个table
        /// 如:create table mytab (ID INT PRIMARY KEY NOT NULL, text TEXT NOT NULL);
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static bool CreateTable(string db, string sql)
        {
            try
            {
                SQLiteCommand command = new SQLiteCommand(sql, dbConnection(db));
                command.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("ExecuteNonQuery(" + sql + ")Err:" + ex);
                return false;
            }
            finally
            {
                closeConn();
            }
        }

        /// <summary>
        /// 返回记录集查询
        /// </summary>
        /// <param name="sql">sql查询语言</param>
        /// <returns>返回查询结果集</returns>
        public static DataTable SqlTable(string db, string sql)
        {
            try
            {
                SQLiteCommand sqlcmd = new SQLiteCommand(sql, dbConnection(db));//sql语句
                sqlcmd.CommandTimeout = 120;
                SQLiteDataReader reader = sqlcmd.ExecuteReader();
                DataTable dt = new DataTable();
                if (reader != null)
                {
                    dt.Load(reader, LoadOption.PreserveChanges, null);
                }
                return dt;
            }
            catch (Exception ex)
            {
                Console.WriteLine("SqlReader(" + sql + ")Err:" + ex);
                return null;
            }
            finally
            {
                closeConn();
            }
        }

        /// <summary>
        /// 执行增删改查操作
        /// </summary>
        /// <param name="sql">查询语言</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string db, string sql)
        {
            try
            {
                SQLiteCommand cmd;
                cmd = new SQLiteCommand(sql, dbConnection(db));
                cmd.ExecuteNonQuery().ToString();
                return 1;
            }
            catch (Exception ex)
            {
                Console.WriteLine("ExecuteNonQuery(" + sql + ")Err:" + ex.Message);
                return 0;
            }
            finally
            {
                closeConn();
            }
        }

        /// <summary>
        /// 删除数据库
        /// </summary>
        /// <param name="fileName">文件名</param>
        public static void DeleteDBFile(string fileName)
        {
            string path = Environment.CurrentDirectory + @"/Data/" + fileName;
            if (File.Exists(path))
            {
                File.Delete(path);
            }
        }
        /// <summary>
        /// 在指定数据库中删除一个table
        /// </summary>
        /// <param name="tablename">表名称</param>
        /// <returns></returns>
        public static bool DeleteTable(string db,string tablename)
        {
            try
            {
                SQLiteCommand cmd = new SQLiteCommand("DROP TABLE IF EXISTS " + tablename, dbConnection(db));
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("ExecuteNonQuery(DROP TABLE IF EXISTS " + tablename + ")Err:" + ex);
                return false;
            }
            finally
            {
                closeConn();
            }
        }
        /// <summary>
        /// 返回一条记录查询
        /// </summary>
        /// <param name="sql">sql查询语言</param>
        /// <returns>返回字符串数组</returns>
        public static List<string> SqlRow(string db,string sql)
        {
            try
            {
                SQLiteCommand sqlcmd = new SQLiteCommand(sql, dbConnection(db));//sql语句
                SQLiteDataReader reader = sqlcmd.ExecuteReader();
                if (!reader.Read())
                {
                    return null;
                }
                List<string> Row = new List<string>();
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    Row.Add(reader[i].ToString());
                }
                reader.Close();
                return Row;
            }
            catch (Exception ex)
            {
                Console.WriteLine("SqlRow(" + sql + ")Err:" + ex);
                return null;
            }
            finally
            {
                closeConn();
            }
        }

        /// <summary>
        /// 在指定表中添加列
        /// </summary>
        /// <param name="tablename">表名</param>
        /// <param name="columnname">列名</param>
        /// <param name="ctype">列的数值类型</param>
        /// <returns></returns>
        public static bool AddColumn(string db, string tablename, string columnname, string ctype)
        {
            try
            {
                SQLiteCommand cmd = new SQLiteCommand("ALTER TABLE " + tablename + " ADD COLUMN " + columnname + " " + ctype, dbConnection(db));
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("ExecuteNonQuery(ALTER TABLE " + tablename + " ADD COLUMN " + columnname + " " + ctype + ")Err:" + ex);
                return false;
            }
            finally
            {
                closeConn();
            }
        }

        /// <summary>
        /// 唯一结果查询
        /// </summary>
        /// <param name="sql">sql查询语言</param>
        /// <returns>返回一个字符串</returns>
        public static string sqlone(string db, string sql)
        {
            try
            {
                SQLiteCommand sqlcmd = new SQLiteCommand(sql, dbConnection(db));//sql语句
                return sqlcmd.ExecuteScalar().ToString();
            }
            catch
            {
                return "";
            }
            finally
            {
                closeConn();
            }
        }

        /// <summary>
        /// 获取一列数据
        /// </summary>
        /// <param name="sql">单列查询</param>
        /// <param name="count">返回结果数量</param>
        /// <returns>返回一个数组</returns>
        public static List<string> sqlcolumn(string db, string sql)
        {
            try
            {
                List<string> Column = new List<string>();
                SQLiteCommand sqlcmd = new SQLiteCommand(sql, dbConnection(db));//sql语句
                SQLiteDataReader reader = sqlcmd.ExecuteReader();
                while (reader.Read())
                {
                    Column.Add(reader[0].ToString());
                }
                reader.Close();
                return Column;
            }
            catch (Exception ex)
            {
                Console.WriteLine("sqlcolumn(" + sql + ")Err:" + ex);
                return null;
            }
            finally
            {
                closeConn();
            }
        }

        /// <summary>
        /// 关闭数据库连接
        /// </summary>
        public static void closeConn()
        {
            try
            {
                if (m_dbConnection.State == ConnectionState.Open)
                    m_dbConnection.Close();
                else if (m_dbConnection.State == ConnectionState.Broken)
                {
                    m_dbConnection.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("closeConnErr:" + ex);
            }
        }
    }
}

winform code

using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;

namespace WindowsFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 创建数据库
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            // 创建数据库文件
            SQLiteHelper.CreateDBFile("mydb.db");
            // 消息提示
            MessageBox.Show("数据库创建成功.");
        }
        /// <summary>
        /// 创建报表:mytab
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            // 创建表:mytab,包含一个ID和一个text字段,ID为键值
            SQLiteHelper.CreateTable("mydb.db", "create table mytab (ID INT PRIMARY KEY NOT NULL, text TEXT)");
            // 消息提示
            MessageBox.Show("报表创建成功.");
        }
        /// <summary>
        /// 删除数据库
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            SQLiteHelper.DeleteDBFile("mydb.db");
            MessageBox.Show("数据库删除成功.");
        }
        /// <summary>
        /// 删除报表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            SQLiteHelper.DeleteTable("mydb.db", "mytab");
            MessageBox.Show("报表删除成功.");
        }
        /// <summary>
        /// 查询一条记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            string strSql = $"select * from mytab where ID={textBox1.Text}";
            List<string> ds = SQLiteHelper.SqlRow("mydb.db", strSql);
            int addr = 0;
            dataGridView2.Rows.Clear();
            int index = dataGridView2.Rows.Add();
            foreach (string d in ds)
            {
                dataGridView2.Rows[index].Cells[addr++].Value = d;
            }
        }
        /// <summary>
        /// 查询整张表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            string strSql = "select * from mytab";
            DataTable ds = SQLiteHelper.SqlTable("mydb.db", strSql);
            dataGridView1.DataSource = ds;
        }
        /// <summary>
        /// 插入一条数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button7_Click(object sender, EventArgs e)
        {
            int id = 0;
            if (dataGridView1.Rows.Count > 0)
            {
                id = int.Parse(dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0].Value.ToString()) + 1;
            }
            // INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
            string sql = $"insert into mytab (ID, text) values({id}, '{textBox2.Text}')";
            SQLiteHelper.ExecuteNonQuery("mydb.db", sql);
            button6_Click(null, null);
        }
        /// <summary>
        /// 清空表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button8_Click(object sender, EventArgs e)
        {
            if (dataGridView1.DataSource != null)
                dataGridView1.DataSource = null;
            dataGridView2.Rows.Clear();
        }
        /// <summary>
        /// 删除一条记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button9_Click(object sender, EventArgs e)
        {
            string sql = $"DELETE FROM mytab where ID='{textBox1.Text}'";
            SQLiteHelper.ExecuteNonQuery("mydb.db", sql);
            button6_Click(null, null);
        }
        /// <summary>
        /// 修改一条记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button10_Click(object sender, EventArgs e)
        {
            string sql = $"update mytab set text='{textBox2.Text}' where ID='{textBox1.Text}'";
            SQLiteHelper.ExecuteNonQuery("mydb.db", sql);
            button6_Click(null, null);
        }
    }
}

 

Guess you like

Origin blog.csdn.net/m0_55074196/article/details/126767980