C#连接Sqlite数据库

下面是我学习WinForm,窗体应用时的记录:

1. 使用封装的方法进行查询Sqlite数据库

public static class SqliteHelper
    {
        //从配置文件中读取连接字符串
        private static string connStr = ConfigurationManager.ConnectionStrings["itcastCater"].ConnectionString;
        //执行命令的方法,insert、update、delete
        public static int ExecuteNonQuery(string sql, params SQLiteParameter[] ps)
        {
            //创建连接对象
            using(SQLiteConnection conn = new SQLiteConnection(connStr))
            {
                //创建命令对象
                SQLiteCommand comd = new SQLiteCommand(sql, conn);
                //添加参数
                comd.Parameters.AddRange(ps);
                //打开连接
                conn.Open();
                //执行命令,并返回受影响的行数
                return comd.ExecuteNonQuery();
            }
        }

        //获取首行首列的方法
        public static object ExecuteScalar(string sql, params SQLiteParameter[] ps)
        {
            //创建连接对象
            using (SQLiteConnection conn = new SQLiteConnection(connStr))
            {
                //创建命令对象
                SQLiteCommand comd = new SQLiteCommand(sql, conn);
                //添加参数
                comd.Parameters.AddRange(ps);
                //打开连接
                conn.Open();
                //执行命令,获取查询结果中的首行首列的值
                return comd.ExecuteScalar();
            }
        }
        
        //获取结果集
        public static DataTable GetDataTable(string sql, params SQLiteParameter[] ps)
        {
            using(SQLiteConnection conn = new SQLiteConnection(connStr))
            {
                //构造适配器对象
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);
                //构造数据表,用于接收查询结果
                DataTable dt = new DataTable();
                //添加参数
                adapter.SelectCommand.Parameters.AddRange(ps);
                //执行结果
                adapter.Fill(dt);
                //返回结果集
                return dt;
            }
        }

    }

2.操作数据库的类,手动写查询代码

 #region  操作数据库的类,手动写查询代码
            /*
             * 操作数据库的类
             * 连接:Connection -> SqliteConnection
             * 命令:Command
             * 适配器:DataAdapter、DataReader、DataSet、DataTable
             */
           
            // 构造接受数据的集合
            List<ManagerInfo> list = new List<ManagerInfo>();

            //从数据库表ManagerInfo中查询数据
            //1.获取连接字符串,数据库存放的路径
            string connStr = @"data source=E:\Sqlite3File\ItcastCater.db;version=3;";
            //2.创建连接对象
            using (SQLiteConnection conn = new SQLiteConnection(connStr))
            {
                //3.创建Command对象
                SQLiteCommand comd = new SQLiteCommand("select * from ManagerInfo", conn);
                //4.打开连接
                conn.Open();
                //5.执行命令
                SQLiteDataReader reader = comd.ExecuteReader();
                //6.读取
                if (reader.HasRows)//判断是否存在数据行
                {
                    while (reader.Read())
                    {
                        // 将一行数据构造成对象加入集合
                        list.Add(new ManagerInfo()
                        {
                            Mid = Convert.ToInt32(reader["mid"]),
                            Mname = reader["mname"].ToString(),
                            Mpwd = reader["mpwd"].ToString(),
                            Mtype = Convert.ToInt32(reader["mtype"])

                        });
                    }
                }
                reader.Close();
                //7.将ManagerInfo查询的数据显示到DataGridView上
                dgvList.DataSource = list;

            }
#endregion

3.Sqlite的增删改查

public partial class ManagerInfoDal
    {
        /// <summary>
        /// select  查询 获取结果集
        /// </summary>
        /// <returns></returns>
        public List<ManagerInfo> GetList()
        {
            //构造要查询的sql语句
            string sql = "select * from ManagerInfo";
            //使用helper进行查询,得到结果
            DataTable dt = SqliteHelper.GetDataTable(sql);
            //将dt中的数据转存到list中
            List<ManagerInfo> list = new List<ManagerInfo>();
            foreach(DataRow row in dt.Rows)
            {
                list.Add(new ManagerInfo()
                    {
                        MId = Convert.ToInt32(row["mid"]),
                        MName = row["mname"].ToString(),
                        MPwd = row["mpwd"].ToString(),
                        MType = Convert.ToInt32(row["mtype"])
                    });
            }
            //返回集合类型
            return list;
        }

        /// <summary>
        /// 插入数据
        /// </summary>
        /// <param name="mi">ManagerInfo类型对象</param>
        /// <returns></returns>
        public int Insert(ManagerInfo mi)
        {
            //构造insert语句
            string sql = "insert into ManagerInfo(mname, mpwd,mtype) values(@name, @pwd, @type)";
            //构造sql语句参数
            SQLiteParameter[] ps = { //使用数组初始化器
                                    new SQLiteParameter("@name", mi.MName),
                                    //将密码进行md5加密
                                    new SQLiteParameter("@pwd", Md5Helper.EncryptString(mi.MPwd)),
                                    new SQLiteParameter("@type", mi.MType)
                                   };
            //执行插入操作
            return SqliteHelper.ExecuteNonQuery(sql, ps);
        }

        /// <summary>
        /// 修改管理员,特别注意:密码
        /// </summary>
        /// <param name="mi"></param>
        /// <returns></returns>
        public int Update(ManagerInfo mi)
        {
            //为什么要进行密码的判断:
            //答:因为密码值是经过md5加密存储的,当修改时,需要判断用户是否改了密码,如果没有改,则不变,如果改了,则重新进行md5加密

            //定义参数集合,可以动态添加元素
            List<SQLiteParameter> listPs = new List<SQLiteParameter>();
            //构造update的sql语句
            string sql = "update ManagerInfo set mname=@name";
            listPs.Add(new SQLiteParameter("@name", mi.MName));
            //判断是否修改密码
            if (!mi.MPwd.Equals("这是原来的密码吗"))
            {
                sql += ",mpwd=@pwd";
                listPs.Add(new SQLiteParameter("@pwd", Md5Helper.EncryptString(mi.MPwd)));
            }
            //继续拼接语句
            sql += ",mtype=@type where mid=@id";
            listPs.Add(new SQLiteParameter("@type", mi.MType));
            listPs.Add(new SQLiteParameter("@id", mi.MId));

            //执行语句并返回结果
            return SqliteHelper.ExecuteNonQuery(sql, listPs.ToArray());
        }

        /// <summary>
        /// 根据编号删除管理员
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public int Delete(int id)
        {
            //构造删除的sql语句
            string sql = "delete from ManagerInfo where mid=@id";
            //根据语句构造参数
            SQLiteParameter p = new SQLiteParameter("@id", id);
            //执行操作
            return SqliteHelper.ExecuteNonQuery(sql, p);
        }
                
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值