mysql实战 C# 访问mysql(连载三)

完整例子代码下载地址:

通过网盘分享的文件:自己写的.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";
相关推荐
麦聪聊数据1 小时前
Web架构如何打通从SQL 脚本到API 服务的全链路追踪?
数据库·sql·架构
Austindatabases1 小时前
SQLite 开发中的数据库开发规范 --如何提升业务系统性能避免基础BUG
数据库·oracle·sqlite·bug·数据库开发
枫叶丹41 小时前
【Qt开发】Qt窗口(六) -> QMessageBox 消息对话框
c语言·开发语言·数据库·c++·qt·microsoft
星环处相逢1 小时前
MySQL 备份与还原:理论与实战全解析
数据库·mysql
一起养小猫1 小时前
MySQL数据库基础:从三层结构到常用操作
数据库·mysql
l***91471 小时前
【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
数据库·mysql·数据库开发
Wang's Blog1 小时前
MongoDB小课堂:精通数据迁移工具 mongoexport 与 mongoimport 的终极指南
数据库·mongodb
一 乐1 小时前
旅游出行|基于Springboot+Vue的旅游出行管理系统设计与实现(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·旅游
我是唐青枫4 小时前
C# 泛型数学:解锁真正的类型安全数值运算
c#·.net