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();
}
}
}