欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

程序员文章站 2024-03-08 15:23:52
...

鉴于MySQL数据库的流行与强大,决定多学习使用。现本着学习的目的,将c#访问操作MySQL数据库进行添加、删除、修改、显示等操作进行梳理。以Visual Studio 2012平台下的示例形式写下来,供以后查看。

一、新建一个Windows 窗体应用程序Test。

如下图所示:

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

二、添加对MySql.Data.dll的引用

如下图所示:

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

三、主要功能设计

计划实现一个用户表的访问,用户表简单的包含:单位、姓名、联系方式3项内容。提供添加、修改、删除用户功能,同时,为了测试MySQL数据库的访问性能,提供批量数量添加测试功能,如批量添加10000个用户,看看数据库的执行效率。界面作如下布局:

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

四、数据库设计

打开MySQL WorkBench创建数据库test,SQL代码如下:

CREATE Database `test` DEFAULT CHARACTER SET utf8 ;

创建数据库表user,SQL代码如下:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `unit` varchar(45) DEFAULT NULL,
  `name` varchar(45) DEFAULT NULL,
  `phone` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

五、c#编程实现数据库访问的各项操作

前面已经添加了MySql.Data.dll的引用,在连接MySQL数据库之前,还要在编程前添加对using MySql.Data.MySqlClient的引用;如下打开Form1.cs添加带注释的那行代码:

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;//添加对MySql.Data.MySqlClient的引用。

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

现在准备工作完毕,可以正式编程实现MySQL数据库的访问操作了

(一)建立数据库连接,并显示数据

定义数据库连接相关变量和对象。

双击Form1设计界面,重载Form1_Load函数。

为Form1类添加MySQL操作需要的变量。并在Form1_Load函数中进行数据库连接,加载用户表中的数据进行显示。在Form1.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;//添加对MySql.Data.MySqlClient的引用。

namespace Test
{
    public partial class Form1 : Form
    {
        MySqlConnection conn;//定义数据库连接
        MySqlCommand cmd = new MySqlCommand();//定义数据库执行操作类
        MySqlDataAdapter adapter;

        DateTime dtStart;//用于在批量添加测试时,记录添加数据库记录的开始时间
        DateTime dtEnd;//用于在批量添加测试时,记录添加数据库记录的结束时间
        private int sum = 0;//用于在批量添加测试时,记录要添加数据库记录的总数

        public Form1()
        {
            InitializeComponent();
        }

        
        private void Form1_Load(object sender, EventArgs e)
        {
           // String sqlConn = "server=10.0.0.3;port=3306;user=root;password=licoo1128;database=test;";//定义连接字符串
            String sqlConn = "server=10.0.0.3;port=3306;user=root;password=licoo1128;database=test;Charset=utf8;";//定义连接字符串,Charset=utf8使可以填充中文字符不出现乱码
            conn = new MySqlConnection(sqlConn);//
            conn.Open();
            try
            {
                cmd.Connection = conn;
                adapter = new MySqlDataAdapter("select * from user", conn);
                DataSet ds = new DataSet();
                adapter.Fill(ds);//填充数据至ds数据集
                bindingSource1.DataSource = ds.Tables[0];//绑定数据
                bindingNavigator1.BindingSource = bindingSource1;//为导航控件绑定数据
                dataGridView1.DataSource = bindingSource1;//为DataGridView数据控件绑定数据
                dataGridView1.Columns[0].ReadOnly = true;//设置第1列,即id列不可编辑
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            conn.Close();
        }
    }
}
C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示转存失败重新上传取消C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

 

(注意:上面连接字符串中加了一个"Charset=utf8",否则向数据库中插入汉字时,会显示为?符号乱码。)

运行程序,看到已经可以显示数据记录了。效果如下图所示:

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示转存失败重新上传取消C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

前我们现在的数据库表还是空的。下面我们继续实现其他功能。

(二)添加一条用户信息

击“添加”按钮,添加实现代码。

        private void btnAdd_Click(object sender, EventArgs e)
        {
            cmd.CommandText = string.Format("INSERT INTO test.user(unit,name,phone) values('{0}','{1}','{2}');", tbUnit.Text, tbName.Text, tbPhone.Text);
            if (cmd.ExecuteNonQuery() > 0)
                MessageBox.Show("添加成功");
            else
                MessageBox.Show("添加失败");
            adapter = new MySqlDataAdapter("select * from user", conn);
            DataSet ds = new DataSet();
            adapter.Fill(ds);//填充数据至ds数据集
            bindingSource1.DataSource = ds.Tables[0];//绑定数据
            bindingNavigator1.BindingSource = bindingSource1;//为导航控件绑定数据
            dataGridView1.DataSource = bindingSource1;//为DataGridView数据控件绑定数据
        }
C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示转存失败重新上传取消C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

上面代码运行可以正常添加记录。

(三)修改用户记录

我们想实现这样的修改功能:在用户表中对某用户信息进行编辑,编辑完毕后,点击“修改”按钮,直接该条修改保存至数据库中。下面是实现代码:

        private void btnModify_Click(object sender, EventArgs e)
        {
            DataGridViewRow dgr=dataGridView1.CurrentRow;//获取当前编辑的行
            cmd.CommandText = string.Format("UPDATE user SET unit='{0}',name='{1}',phone='{2}' WHERE id='{3}';",
                dgr.Cells[1].Value.ToString(),
                dgr.Cells[2].Value.ToString(), 
                dgr.Cells[3].Value.ToString(), 
                dgr.Cells[0].Value.ToString());
            if (cmd.ExecuteNonQuery() > 0)
                MessageBox.Show("修改成功");
            else
                MessageBox.Show("修改失败");        
        }
C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示转存失败重新上传取消C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

效果如下:

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示转存失败重新上传取消C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

(四)删除记录

现在我们想实现这样的删除功能,选择列表中的某几行(整行选择,选择某个单元格不算选择),点击“删除”按钮,将记录从列表和数据库中同步删除,实现代码如下:

        private void btnDelete_Click(object sender, EventArgs e)
        {
            foreach(DataGridViewRow dgr in dataGridView1.SelectedRows)
            {
                cmd.CommandText = string.Format("DELETE FROM user WHERE id='{0}';",dgr.Cells[0].Value.ToString());
                if (cmd.ExecuteNonQuery() > 0)
                    dataGridView1.Rows.Remove(dgr);//如果成功从数据中删除了记录,则从列表中同步删除。
                else
                    MessageBox.Show(string.Format("从数据库中删除id为{0}的记录失败", dgr.Cells[0].Value.ToString()));
            }
        }
C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示转存失败重新上传取消C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

(五)查询记录

我们想实现这样的模糊查询,在编辑框中输入某文本,点击“查询”按钮,数据库中的用户信息记录,不管是单位、姓名、还是电话中只要出现该文本,即显示出来。

        private void btnFind_Click(object sender, EventArgs e)
        {
            string sql = string.Format("select * from user where unit like '%{0}%' or name like '%{0}%' or phone like '%{0}%';", tbInfo.Text);
            adapter = new MySqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            adapter.Fill(ds);//填充数据至ds数据集
            bindingSource1.DataSource = ds.Tables[0];//绑定数据
            bindingNavigator1.BindingSource = bindingSource1;//为导航控件绑定数据
            dataGridView1.DataSource = bindingSource1;//为DataGridView数据控件绑定数据
            dataGridView1.Columns[0].ReadOnly = true;//设置第1列,即id列不可编辑
        }

(六)批量添加数据

为了测试MySQL数据库的sql语句执行效率,我加入了这个批量添加功能,进行大数据量的执行速度测试,并实时显示执行进度。为此为Form1窗体添加异步执行控件BackgroundWorking控件对象backgroundWorker1。设置WorkerReportsProgress属性为true,并添加异步处理事件,如下:

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

添加代码如下:

        private void btnBulkAdd_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.IsBusy)
                return;
            sum = Convert.ToInt32(tbSum.Text);
            backgroundWorker1.RunWorkerAsync();//执行后台异步操作,写入数据库
            progressBar1.Maximum = sum;
            progressBar1.Value = 0;
            progressBar1.Step = 1;
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            dtStart = DateTime.Now;
            BackgroundWorker worker = sender as BackgroundWorker;

            for (int i = 0; i < sum; i++)
            {
                cmd.CommandText = string.Format("INSERT INTO user (unit, name, phone) VALUES ('南京{0}', '徐{0}', '18012341234');", i);
                cmd.ExecuteNonQuery();
                worker.ReportProgress(i);
            }
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            labelSum.Text = string.Format("已添加{0}条记录", (e.ProgressPercentage + 1).ToString());
            progressBar1.Value++;
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            dtEnd = DateTime.Now;
            TimeSpan ts = dtEnd - dtStart;
            string sInfo = string.Format("添加完毕!用时:{0}天{1}小时{2}分{3}秒{4}毫秒", ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds);
            MessageBox.Show(sInfo);
            cmd.Connection = conn;
            MySqlDataAdapter adp = new MySqlDataAdapter("select * from user", conn);
            DataSet ds = new DataSet();
            adp.Fill(ds);
            bindingSource1.DataSource = ds.Tables[0];
            bindingNavigator1.BindingSource = bindingSource1;
            dataGridView1.DataSource = bindingSource1;
        }

执过程如下:

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

执行完毕后提示执行时间,如下图所示:

C#连接操作MySQL数据库进行添加、修改、删除、查询等操作的演示

可以看到单个后台进程执行插入10000条数据库记录用了21秒多。MySQL的执行效率还是很高的。

(七)清空数据库

测试数据太多了,我们添加一个清空数据库功能。代码如下:

        private void btnClearAll_Click(object sender, EventArgs e)
        {
            cmd.CommandText = string.Format("delete from test.user");
            if (cmd.ExecuteNonQuery() > 0)
                MessageBox.Show("清空数据库成功");
            else
                MessageBox.Show("操作失败");
            adapter = new MySqlDataAdapter("select * from user", conn);
            DataSet ds = new DataSet();
            adapter.Fill(ds);//填充数据至ds数据集
            bindingSource1.DataSource = ds.Tables[0];//绑定数据
            bindingNavigator1.BindingSource = bindingSource1;//为导航控件绑定数据
            dataGridView1.DataSource = bindingSource1;//为DataGridView数据控件绑定数据
        }

六、后记。

至此,各项功能都实现了,代码好写,编辑个博客整了大半天。 代码一并上传至资源中。供大家参考。