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";
相关推荐
大模型码小白3 分钟前
数据可视化:AI 生成 HTML5 动态交互式数据图表
前端·数据库·人工智能·深度学习·机器学习·信息可视化·html5
风哥2号4 分钟前
数据库教程FGMT26‑1‑GoldenGate数据库容灾迁移01(OGG同构异构、数据库迁移、数据同步、容灾复制)
数据库·oracle
颜颜yan_17 分钟前
Firebird 鸿蒙 PC 适配全记录:打通数据库内核、Qt 管理端与原生维护工具
数据库·qt·harmonyos
风哥2号17 分钟前
数据库教程FGMT25‑Oracle多租户架构CDB与PDB运维管理
数据库·oracle
程序猿乐锅21 分钟前
【黑马点评 | 第一篇】从 Session 到 Redis+Token 的改造与拦截器实现
数据库·redis·缓存
南京兴帝文化传媒有限公司28 分钟前
基于地图平台的本地商户信息优化:药店夜间服务标注与客户转化实操
前端·javascript·数据库·人工智能·geo 优化·geo优化避坑·ai搜索获客
u01090535933 分钟前
NAS远程访问内网穿透方案之使用神卓N600实现不限速方法
服务器·网络·数据库
野生技术架构师40 分钟前
Redis Hot Key 与 Big Key:危害、发现与解决方案
数据库·redis·缓存
杨云龙UP1 小时前
DB2 HADR 主备架构活动日志参数优化操作手册
linux·运维·服务器·数据库·db2·db2 hadr·日志参数调整
我是大猴子1 小时前
MyBatis‑Plus & MyBatis‑Flex 区别
java·服务器·数据库