完整例子代码下载地址:
通过网盘分享的文件:自己写的.rar
链接: https://pan.baidu.com/s/1nMC2N6y7jTeusnLz-K6Tww 提取码: abcd
--来自百度网盘超级会员v6的分享
通过一个实例代码,实现c#对mysql数据库的数据录入、保存、修改、删除和数据库事务处理。
未完稍后继续...


一、首先在Navicat 17 for MySQL中建立数据库db1,然后建立表student

在visual studio C# 中,引入mysql库


然后在c#中定义mysql数据库访问类DBHelp.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace WindowsFormsApp1
{
class DBHelp //mySQL 访问类
{
// 声明私有化变量(外部无法调用 只能在这个类里面使用) 连接字符串
String connStr = "server=localhost;database=db1;uid=root;pwd=3201319";
private MySqlConnection conn;
// 创建私有连接方法 在这个类的下方使用启动和关闭
private MySqlConnection getConn() //连接函数
{
conn = new MySqlConnection(connStr);
// State 状态 当状态为关闭的时候打开
if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
}
//将创建并且打开的连接返回
return conn;
}
// 创建关闭方法
private void Close() //连接关闭函数
{
//当conn为空时代表未打开或者没有所以不用关闭 返回空;
if (conn == null)
{
return;
}
// 判断当前状态如果为打开或者正在连接的时候 进行关闭;
if (conn.State == System.Data.ConnectionState.Open || conn.State == System.Data.ConnectionState.Connecting)
{
// 关闭
conn.Close();
}
}
// 封装查询
public MySqlDataAdapter select(String sql) // 封装查询
{
conn = getConn();
MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn);
return adapter;
}
// 封装增删改
public String ExecuteNonQuery(String sql) // 封装增删改
{ // 将外面的sql语句传到这里来
try
{ //捕捉异常
//创建连接
conn = getConn();
MySqlCommand cmd = new MySqlCommand(sql, conn); //这里的sql是由页面里面的sql语句传过来
int i = cmd.ExecuteNonQuery(); // 返回受影响行数
//return i; // 将获取到的受影响行数返回到页面中来知道是否完成操作
if (i > 0)
{
return "true";
}
return "false";
}
catch (Exception x) // 捕捉到异常返回一个-1的值代表着没有找到东西
{
//return -1;
return x.Message;
}
finally
{ // 这里是不管上方是否有错都能跑到这一行
Close();
}
}
public MySqlDataReader cha(string sql) //定义返回 只读行
{
conn = getConn();
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader Reader = cmd.ExecuteReader();
return Reader;
}
///////////////////////////////////////////////////////////////////////////
//使用方法
//string sql_banme = string.Format(@"SELECT bname 宿舍楼名 FROM building where bname='{0}'", name);
//MySqlDataReader i = db.cha(sql_banme);
// if (i.HasRows)
// {//有则
// MessageBox.Show("请勿重复添加");
// }
/////////////////////////////////////////////////////////////////////////
public MySqlConnection MysqlCon
{
get
{
if (conn == null)
{
conn = new MySqlConnection(connStr);
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Broken)
{
conn.Close();
conn.Open();
}
return conn;
}
}
//带事务的 执行sql
//事务(MySqlTransaction类)
public void sqlTransaction(string str_sql)
{
String connetStr = "server=localhost;database=db1;uid=root;pwd=3201319";
MySqlConnection conn = new MySqlConnection(connetStr);
conn.Open();//必须打开通道之后才能开始事务
MySqlTransaction transaction = conn.BeginTransaction();//事务必须在try外面赋值不然catch里的transaction会报错:未赋值
Console.WriteLine("已经建立连接");
try
{
string sql1 = str_sql;
MySqlCommand cmd1 = new MySqlCommand(sql1, conn);
cmd1.ExecuteNonQuery();
}
catch (MySqlException ex)
{
Console.WriteLine(ex.Message);
transaction.Rollback();//事务ExecuteNonQuery()执行失败报错,username被设置unique
conn.Close();
}
finally
{
if (conn.State != System.Data.ConnectionState.Closed)
{
transaction.Commit();//事务要么回滚要么提交,即Rollback()与Commit()只能执行一个
conn.Close();
}
}
}
}
}
查询数据并绑定到dataGridView
// string connStr = "server=localhost;port=3306;database=db1;user=root;password=3201319;";
DataSet ds = new DataSet();
string showBookCommandText = "select * " + "from student";
MySqlDataAdapter adapter = db.select(showBookCommandText); //调用类中 的查询函数
adapter.Fill(ds,"student"); //填充到ds
dataGridView1.DataSource = ds.Tables["student"];
//dataGridView1.DataMember = "student";