C#查询数据,删除,更新升级版

发布于:2022-07-26 ⋅ 阅读:(281) ⋅ 点赞:(0)


前言

提示:此次案例是点击DataGridView组件触发的事件

例如:当DataGridView加载完sql表内的数据之后,用户点击表内的一条行数据,相应的数据信息会显示在下方的文本框内。如下:
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

逻辑思路:
1):先创建窗体
2):构造slq 方法,因为数据很多,要考虑用到集合类,如果只是一条信息,那么用User类即可
3):绑定点击DataGridView触发的事件
4):对页面的文本框进行赋值,再进行其他的操作,例如,更新,删除

一、创建窗体

在这里插入图片描述

创建窗体之后要引入集合的命名空间,不然会报错

using System.Collections.ObjectModel;
//sql类也是

二、sql方法

提示:使用集合需要引入命名空间,不然会报错

using System.Collections.ObjectModel;

sql代码如下(示例):

 //返回集合类型
        public Collection<User> ReadUser()
        {
        //创建集合对象
            Collection<User> result = new Collection<User>();
            MySqlConnection con = new MySqlConnection(str);
            MySqlCommand cmd = new MySqlCommand();
            try
            {
                con.Open();
                cmd.Connection = con;
                cmd.CommandText = "select * from tb_user ";

                MySqlDataReader reader = cmd.ExecuteReader();
                //注: 此前这里是if,但是由于数据多,要用while循环遍历
                while (reader.Read())
                {
                    User user = new User();

                    user.Name = reader["name"].ToString();
                    user.Tel = reader["tel"].ToString();
                    user.Sex = reader["sex"].ToString();
                    user.Password = reader["password"].ToString();
                   
                   //添加到集合里面
                    result.Add(user);
                }
            }
            catch (Exception ex)
            {
            //出现异常,并返回异常信息
                User user = new User();
                user.Tel = ex.Message;
                result.Add(user);
            }
            finally
            {
                con.Close();
            }
            //返回集合
            return result;
        }

三、对DataGridView绑定鼠标点击事件

在这里插入图片描述

代码如下(示例):

        int index;  //方法之外定义一个变量
        private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
        {
       //if语句是对数据有无的判断,即这个dataGridView1的这一行有没有数据,
       //若没有这个判断,无数据时点击dataGridView会出现异常
            if(this.dataGridView1.CurrentRow == null)
            {
                return;
            } 
            //获取这一行的信息
            index = this.dataGridView1.CurrentRow.Index;
            
            //对文本框的赋值
            txtname.Text = users[index].Name;
            txtpass.Text = users[index].Password;
            txtsex.Text = users[index].Sex;
            txttel.Text = users[index].Tel;

        }

提示:这里针对一个误区的讲解,很多人得到别人的源码时,会对着源码敲,但是要学会知晓或者熟悉某些方法的来源


对listfrm窗体加载数据

	//定义sql类对象
        yyl_mysql sql = new yyl_mysql(); 

	//创建user集合类对象users
        Collection<User> users = new Collection<User>();
        public listfrm()
        {
            InitializeComponent();
            //调用上述的集合类方法,以users为中间过渡,不直接赋值
            users = sql.ReadUser();
		//users间接给dataGridView1赋数据源
            dataGridView1.DataSource = users;
        }

四、运行效果

在这里插入图片描述

这样的效果已经实现出来了,剩下的就是完善修改和删除按钮的功能,对于修改和删除不熟悉的兄弟可以看看我以往的博客。

五、删除

由于tel值是主键,我们可以将txttel的属性更改为不可用,即 Enabled : false
在这里插入图片描述

代码如下(示例): 直接调用即可

        private void button2_Click(object sender, EventArgs e)
        {
            string tel = txttel.Text;
            if(sql.Delete(tel))
            {
                MessageBox.Show("删除成功!");
//这两句的即是重新读取数据库,再给dataGridView1赋值(删除后的数据),
                users = sql.ReadUser();
                dataGridView1.DataSource = users;
            }
            else
            {
                MessageBox.Show("删除失败!");
            }
        }

六、修改

提示:这里的修改是以一个User类对象接收信息,并向数据库方法传入一个类对象调用,我以往的修改方法是以字符串形式,如果数据量太多,字符串显而不合适

代码如下(示例): 直接调用即可

       private void button1_Click(object sender, EventArgs e)
        {
            User user = new User();

            user.Name = txtname.Text;
            user.Tel = txttel.Text;
            user.Sex = txtsex.Text;
            user.Password = txtpass.Text;

            if (sql.Updata(user))
            {
                MessageBox.Show("修改成功!");

//不可缺少,及时更新dataGridView1数据信息
                users = sql.ReadUser();
                dataGridView1.DataSource = users;
            }
            else
            {
                MessageBox.Show("修改失败!");
            }
        }

针对于User类的参数修改方法,这里我给一个参考

代码如下(示例): 直接调用即可

      //lsitfrm Update
        //修改: sql方法接收一个User类对象
        public bool Updata(User user)
        {
            bool k = false;
            MySqlConnection con = new MySqlConnection(str);
            MySqlCommand cmd = new MySqlCommand();
            try
            {
                con.Open();
                cmd.Connection = con;
                cmd.CommandText = "UPDATE tb_user SET name = @name, sex = @sex , password = @password WHERE tel = @tel";

                cmd.Parameters.Add("name", user.Name);
                cmd.Parameters.Add("tel", user.Tel);
                cmd.Parameters.Add("password", user.Password);
                cmd.Parameters.Add("sex", user.Sex);

                int i = cmd.ExecuteNonQuery();
                if (i > 0) k = true;
                else k = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                k = false;
            }
            finally
            {
                con.Close();
            }
            return k;
        }

至此以上功能都已实现,对于更新和删除的运行效果你们可以自行运行便知。

总结

以上就是今天要讲的内容,有什么不懂的可以私信给我,或者评论,我都会一一解答。


网站公告

今日签到

点亮在社区的每一天
去签到