C#使用MySQL实现增删改查的演示小程序,附完整源码

使用前准备

C#想要连接MySQL,方法有很多,其中比较简单的是使用MySQL的动态连接库MySql.Data.dll。下载号动态连接库后,在Visual Studio EXpress中添加引用即可。
上述需求完成后,需要在数据库中建表(下面的演示小程序中没有建表功能,需要预先建表)。

我建的演示表(表名 userlist):在这里插入图片描述

构建窗体

此演示小程序中,使用DataGridView显示数据库数据。使用VS可以很快的完成这项工作,在此略过不讲
程序主界面

界面中组件名及其对应的文本:

组件名文本
button1连接数据库
all_data查看全部数据
btn_Query查找
btn_Delect删除
btn_insert添加
btn_updata修改
close_sql关闭数据库

数据库的连接

使用MySql类获得一个数据库连接的对象conn

MySqlConnection conn = new MySqlConnection("data source=localhost;database=MyWeb_DB;user id=root;password=1111;pooling=false;charset=utf8");

在连接数据库按钮的点击事件中打开数据库连接:

//按钮button1为界面中的数据库连接按钮
 private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                conn.Open();//打开通道,建立连接,可能出现异常,使用try catch语句
                Console.WriteLine("已经建立连接");
                label1.Text = "";
                label1.Text = "连接已完成!";
                //在这里使用代码对数据库进行增删查改
            }
            catch (MySqlException ex)
            {
                Console.WriteLine(ex.Message);
            }   
        }

在点击 [连接数据库] 按钮后,数据库连接成功则在旁边的标签中显示连接成功,失败则会弹窗显示失败原因。

在DataGridView(数据表格)中显示数据库中的全部数据。

因为显示数据库中的全部数据为常用操作,所以将其封装为一个函数QueryAll(),以便再次使用。
功能的具体实现见代码及注释

       private void all_data_Click(object sender, EventArgs e){
            QueryAll();//在表格中显示全部数据
        }
        private void QueryAll(){
            string sql = "SELECT * FROM userlist";
            try
            {
                MySqlCommand cmd = new MySqlCommand(sql, conn);
               // DataSet ds = new DataSet();
                MySqlDataReader reader = cmd.ExecuteReader();//执行ExecuteReader()返回一个MySqlDataReader对象
                //将bs的数据来源设置为reader对象
                BindingSource bs = new BindingSource();
                bs.DataSource = reader;
                //将表格的数据来源设置为bs对象
                this.dataGridView1.DataSource = bs;

                //设置每一列的标题
                dataGridView1.Columns[0].HeaderText = "编号";
                dataGridView1.Columns[1].HeaderText = "姓名";
                dataGridView1.Columns[2].HeaderText = "性别";
                dataGridView1.Columns[3].HeaderText = "密码";
                dataGridView1.Columns[4].HeaderText = "邮箱";
                //选择第四列不显示
                dataGridView1.Columns[3].Visible = false;
                reader.Close();
            }
            catch (Exception err)
            {
                MessageBox.Show("错误信息:" + err.Message + "\n错误来源:" + err.Source);
            }
        }

使用效果:

在这里插入图片描述

查找功能实现

查找功能是获取文本框中输入的内容,再到数据库中进行对比,将结果显示到表格中。

        private void btnQuery_Click(object sender, EventArgs e){
            if(textBox1.Text!="")
                QueryLike();
             else
             	MessageBox.Show("输入的内容不可为空");
        }
 		private void QueryLike() {
            string sql = string.Format("SElECT * FROM userlist WHERE U_NAME='{0}'",textBox1.Text);
            try
            {
                MySqlCommand mcom = new MySqlCommand(sql,conn);
                //使用数据库数据适配器,将数据填充
                MySqlDataAdapter sda = new MySqlDataAdapter(sql, conn);
                //创建DataSet类的对象
                DataSet ds = new DataSet();
                //使用SqlDataAdapter对象sda将查询结果填充到DataSet对象ds中
                sda.Fill(ds);
                //设置表格控件的数据来源为ds
                dataGridView1.DataSource = ds.Tables[0];
               // mreader.Close();
            }
            catch (Exception err)
            {
                MessageBox.Show("错误信息:" + err.Message + "\n错误来源:" + err.Source);
                throw;
            }
        }

效果演示:
在这里插入图片描述

删除功能

在选中某行后,点击删除按钮,即可在数据库中删除此行的数据。

private void btnDelect_Click(object sender, EventArgs e)
        {
            int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString());
            //string name = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();  //选中行的第1行,第2列
            //数据库连接串
            
            try
            {
               //MySqlConnection conn = new MySqlConnection(connStr);
                string sql = string.Format("delete from userlist where U_ID={0}",id);
                //填充占位符
                //创建命令执行器对象
                MySqlCommand cmd = new MySqlCommand(sql,conn);
                //执行SQL语句
                cmd.ExecuteNonQuery();
                //弹出消息提示删除成功
                MessageBox.Show("删除成功!");
                //调用查询全部的方法,刷新DataGridView控件中的数据
                QueryAll();
            }
            catch (Exception err)
            {
                MessageBox.Show("错误信息:"+err.Message+"\n错误来源:"+err.Source);
              
            }
        }

效果演示:
在这里插入图片描述点击**[删除]**按钮,删除成功则弹窗显示
在这里插入图片描述删除成功后自动更新表格,“王春华”字段被删除
在这里插入图片描述

修改功能

修改功能在另一个窗口中实现
在这里插入图片描述
修改按钮的点击事件:

private void btn_updata_Click_1(object sender, EventArgs e)
        {
 /*修改数据*/
            int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString());//获取选中的行的id     
            //向upDateform窗口传参代表要修改数据
                upDateform up = new upDateform(id);
                up.Show();
        }

功能的实现代码如下:

 private void button1_Click_1(object sender, EventArgs e)
        {
                //状态为修改数据
                string sql = "UPDATE userlist (`U_ID` ,`U_NAME` ,`U_SEX` ,`U_PWD` ,`U_EMAIL`)VALUES ('{0}','{1}','{2}','{3}','{4}')";
                sql = string.Format(sql, txtid.Text, txtname.Text, txtsex.Text, txtpwd.Text, txtmail.Text);
                try
                {
                    MySqlCommand cmd = new MySqlCommand(sql, conn);//命令执行器
                    cmd.ExecuteNonQuery();//执行sql命令
                    MessageBox.Show("更新成功!");
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.Message);
                    throw;
                }
            conn.Close();
        }

添加数据功能

添加按钮的点击事件:

private void btn_insert_Click(object sender, EventArgs e)
        {
            /*添加数据*/
            //不向upDateform窗口传参代表添加数据
            upDateform up = new upDateform();
            up.Show();
        }

添加数据的功能同样在上面的新窗口中实现

 private void button1_Click_1(object sender, EventArgs e)
        {
                //状态未新增数据
                string sql = "INSERT INTO userlist (`U_ID` ,`U_NAME` ,`U_SEX` ,`U_PWD` ,`U_EMAIL`)VALUES ('{0}','{1}','{2}','{3}','{4}')";
                sql = string.Format(sql, txtid.Text, txtname.Text, txtsex.Text, txtpwd.Text, txtmail.Text);
                try
                {
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("更新成功!");
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.Message);
                    throw;
                }
            conn.Close();
        }

主窗口的完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace opasys
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //string connstr = "data source=localhost;database=cs_test;user id=root;password=123456;pooling=false;charset=utf8";//pooling代表是否使用连接池
        MySqlConnection conn = new MySqlConnection("data source=localhost;database=MyWeb_DB;user id=root;password=1111;pooling=false;charset=utf8");

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                conn.Open();//打开通道,建立连接,可能出现异常,使用try catch语句
                Console.WriteLine("已经建立连接");
                label1.Text = "";
                label1.Text = "连接已完成!";
                //在这里使用代码对数据库进行增删查改
            }
            catch (MySqlException ex)
            {
                Console.WriteLine(ex.Message);
            }   
        }

        private void all_data_Click(object sender, EventArgs e){
			
            //执行ExecuteReader()返回一个MySqlDataReader对象
            QueryAll();
           
        }

        private void close_sql_Click(object sender, EventArgs e)
        {
            conn.Close();
            label2.Text = "";
            label2.Text = "数据库已关闭!";
        }

        private void QueryAll(){
            string sql = "SELECT * FROM userlist";

            try
            {
                MySqlCommand cmd = new MySqlCommand(sql, conn);
               // DataSet ds = new DataSet();
                MySqlDataReader reader = cmd.ExecuteReader();//执行ExecuteReader()返回一个MySqlDataReader对象
                //将bs的数据来源设置为reader对象
                BindingSource bs = new BindingSource();
                bs.DataSource = reader;
                //将表格的数据来源设置为bs对象
                this.dataGridView1.DataSource = bs;

                //设置每一列的标题
                dataGridView1.Columns[0].HeaderText = "编号";
                dataGridView1.Columns[1].HeaderText = "姓名";
                dataGridView1.Columns[2].HeaderText = "性别";
                dataGridView1.Columns[3].HeaderText = "密码";
                dataGridView1.Columns[4].HeaderText = "邮箱";
                //选择第四列不显示
                dataGridView1.Columns[3].Visible = false;
                reader.Close();
            }
            catch (Exception err)
            {
                MessageBox.Show("错误信息:" + err.Message + "\n错误来源:" + err.Source);
            }
        }

        private void QueryLike() {
            string sql = string.Format("SElECT * FROM userlist WHERE U_NAME='{0}'",textBox1.Text);
            try
            {
                MySqlCommand mcom = new MySqlCommand(sql,conn);
                //使用数据库数据适配器,将数据填充
                MySqlDataAdapter sda = new MySqlDataAdapter(sql, conn);
                //创建DataSet类的对象
                DataSet ds = new DataSet();
                //使用SqlDataAdapter对象sda将查询结果填充到DataSet对象ds中
                sda.Fill(ds);
                //设置表格控件的数据来源为ds
                dataGridView1.DataSource = ds.Tables[0];
               // mreader.Close();
            }
            catch (Exception err)
            {
                MessageBox.Show("错误信息:" + err.Message + "\n错误来源:" + err.Source);
                throw;
            }

        }

        private void btnQuery_Click(object sender, EventArgs e)
        {
            if(textBox1.Text!="")
                QueryLike();
        }

        private void btnDelect_Click(object sender, EventArgs e)
        {
            int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString());
            //string name = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();  //选中行的第1行,第2列
            //数据库连接串
            
            try
            {
               //MySqlConnection conn = new MySqlConnection(connStr);
                string sql = string.Format("delete from userlist where U_ID={0}",id);
                //填充占位符
                //创建命令执行器对象
                MySqlCommand cmd = new MySqlCommand(sql,conn);
                //执行SQL语句
                cmd.ExecuteNonQuery();
                //弹出消息提示删除成功
                MessageBox.Show("删除成功!");
                //调用查询全部的方法,刷新DataGridView控件中的数据
                QueryAll();
            }
            catch (Exception err)
            {
                MessageBox.Show("错误信息:"+err.Message+"\n错误来源:"+err.Source);
              
            }
        }

 

        private void btn_insert_Click(object sender, EventArgs e)
        {
            /*添加数据*/
            upDateform up = new upDateform();
            up.Show();
        }

        private void btn_updata_Click_1(object sender, EventArgs e)
        {
 /*修改数据*/
            int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString());//获取选中的行的id     
                upDateform up = new upDateform(id);
                up.Show();
        } 
    }
}

upDateFrom窗口的完整代码

这个窗口同时担任了新增数据修改数据的功能

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace opasys
{
    public partial class upDateform : Form
    {
        //update(Data ID):修改数据(type=1)
        //update():新增数据
        private int dataid = -1;
        public upDateform() 
        {
            InitializeComponent();
        }
        public upDateform(int dataid)
        {
            InitializeComponent();
            this.dataid = dataid;
        }

        MySqlConnection conn = new MySqlConnection("data source=localhost;database=MyWeb_DB;user id=root;password=111;pooling=false;charset=utf8");
        
        private void upDate_Load(object sender, EventArgs e)
        {
            try
            {
                conn.Open();//打开通道,建立连接,可能出现异常,使用try catch语句
                Console.WriteLine("已经建立连接");
                if (dataid != -1)
                {
                    MessageBox.Show("窗体加载函数,已传入参数:"+ dataid);
                    bool isin = false;
                    string sql = string.Format("SELECT * FROM userlist");

                    MySqlCommand cmd = new MySqlCommand(sql,conn);//得到一个数据库命令执行器对象

                    MySqlDataReader reader = cmd.ExecuteReader();   
                    while (reader.Read())
                    {
                        int theid = reader.GetInt32("U_ID");
                        if (dataid == theid)
                        {
                            isin = true;
                            txtid.Text = theid.ToString();
                            txtname.Text = reader.GetString("U_NAME");
                            txtsex.Text = reader.GetString("U_SEX");
                            txtpwd.Text = reader.GetString("U_PWD");
                            txtmail.Text = reader.GetString("U_EMAIL");
                            break;
                        }

                    }
                    if (!isin)
                    {
                        MessageBox.Show("出错,未请求到数据!");
                    }
                    reader.Close();
                }
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private void button1_Click_1(object sender, EventArgs e)
        {
            if (dataid == -1)
            {
                MessageBox.Show("更新按钮,未传入参数!");
                //如果状态未新增数据
                string sql = "INSERT INTO userlist (`U_ID` ,`U_NAME` ,`U_SEX` ,`U_PWD` ,`U_EMAIL`)VALUES ('{0}','{1}','{2}','{3}','{4}')";
                sql = string.Format(sql, txtid.Text, txtname.Text, txtsex.Text, txtpwd.Text, txtmail.Text);
                try
                {
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("更新成功!");
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.Message);
                    throw;
                }
            }
            else 
            {
                MessageBox.Show("更新按钮,已传入参数!");
                //状态为修改数据
                string sql = "UPDATE userlist (`U_ID` ,`U_NAME` ,`U_SEX` ,`U_PWD` ,`U_EMAIL`)VALUES ('{0}','{1}','{2}','{3}','{4}')";
                sql = string.Format(sql, txtid.Text, txtname.Text, txtsex.Text, txtpwd.Text, txtmail.Text);
                try
                {
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("更新成功!");
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.Message);
                    throw;
                }
            }
            conn.Close();
        }

    }
}
  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
C# VS2012 86系统 mysql-5.5.27-win32 功能:利用动软代码生成器 从 数据库表或者视图中生成 的三层结构代码 实现 数据增删改查。 如果可以,请下载资源中 修改 的动软代码生成器 C#模板生成 1、由于之前使用 动软生成 java 网页源码,比较成功,此处编写C#程序时沿用,感觉更加适合。 2、直接调用动软的相关dll和生成的三层代码,可以较快的实现增删改查操作。 3、由于一些dll版本的问题及动软生成器自身的一些不完善,产生了一些问题并查找了挺久,所以把可以实现的版本发布出来共享。 前提: 使用的是 mysql数据库时才可能会出现以下问题 问题: 1、MySql.Data.dll 必须是5.6.1以上版本,否则会出现 “向信号量添加给定计数将导致其超出它的最大计数” 的问题。 2、动软代码生成时,必须增加该命名空间 using MySql.Data.MySqlClient; 3、动软代码必须修改 “工具”-“选项”弹出窗 后,点击 ”代码生成设置“-”字段类型映射“-”参数符号“中删除 mysql @,添加mysql ? 4、如果不修改3的设置,在增删改时 参数设置会失败。 5、mysql保存或者修改时,中文会出现乱码,这时必须 在DbHelperMySQL类的 连接字中增加Charset=utf8;即 protected static string connectionString = "Server=localhost;User Id=root;Password=root;Persist Security Info=True;Database=mnzfz;Charset=utf8;"; 6、如果要在局域网中远程访问,请 修改 mysql 权限:grant select,update,insert,delete on *.* to 'root'@'192.168.0.1' identified by "123456";
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值