一文带你了解C#操作MySql的方法

 更新时间:2023年03月20日 08:41:45   作者:黑夜中的潜行者  
工作中大多数情况下用的都是 MySql 但一直没有记录,相关操作。这篇文章以便 MySql.Data 库进行MySql操作,使用 C# 执行 SQL 语句,造个轮子

代码介绍

功能包含:

  • 创建数据库
  • 创建数据表
  • 批量添加数据
  • MySql事务执行
  • 清表
  • 分页、模糊查询

代码实现

创建数据库

public void CreateDatabase(string sqlStr)
{
    string str = $"Server=localhost;User=root;Password=123456;CharSet=UTF8;";
    using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnection))
    {
        mySqlConnection.Open();
        try 
        {
            MySqlCommand cmd = new MySqlCommand(sqlStr, mySqlConnection);
            cmd.ExecuteNonQuery();
        } catch(Exception e) 
        {
            Debug.Log(e.Message.ToString());
        }
        finally
        {
            mySqlConnection.Close();
        }
    }
} 

创建数据表

private static void CteateDataTable(string sqlStr)
{
    using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnectStr))
    {
        mySqlConnection.Open();
        MySqlCommand cmd = new MySqlCommand(sqlStr, mySqlConnection);
        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {
            mySqlConnection.Close();
        }
    }
}

查询数据

private static DataTable SelectTable(string sqlStr)
{
    DataTable dt = new DataTable();
    using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnectStr))
    {
        mySqlConnection.Open();
        try
        {
            MySqlDataAdapter da = new MySqlDataAdapter(sqlStr, mySqlConnection);
            da.Fill(dt);
            return dt;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {
            mySqlConnection.Close();
        }
    }
}

事务

private static bool ExecuteSqlTransaction(string sqlStr)
{
    using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnectStr))
    {
        mySqlConnection.Open();
        MySqlCommand cmd = mySqlConnection.CreateCommand();
        cmd.Connection = mySqlConnection;
        MySqlTransaction sqlTransaction = mySqlConnection.BeginTransaction();
        try
        {
            cmd.CommandText = sqlStr;
            cmd.ExecuteNonQuery();
            sqlTransaction.Commit();
            sqlTransaction = mySqlConnection.BeginTransaction();
            return true;
        }
        catch (Exception ex)
        {
            sqlTransaction.Rollback();
            return false;
        }
        finally
        {
            mySqlConnection.Close();
        }
    };
}

代码示例

using MySql.Data.MySqlClient;
using Newtonsoft.Json;
using NPinyin;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Text;

namespace ConsoleApp1
{
    internal class Program
    {
        private static string mySqlConnectStr = ConfigurationManager.AppSettings["connectionStr"];

        static void Main(string[] args)
        {
            CreateDatabase("CREATE DATABASE DataBaseName;");

            CreateTable();

            SQLCMD();

            DeleteTableDataAll();

            var drugData = SelectTable(@"SELECT * FROM `t_drugs` WHERE t_drugs.drug_name_py LIKE ""%PT%"" LIMIT 1,10;");

            List<Drug> drugs = new List<Drug>();
            foreach (DataRow item in drugData.Rows)
            {
                drugs.Add(new Drug
                {
                    hospital_no = item["hospital_no"].ToString(),
                    hospital_name = item["hospital_name"].ToString(),
                    drug_id = item["drug_id"].ToString(),
                    drug_name = item["drug_name"].ToString(),
                    drug_type = item["drug_type"].ToString(),
                    drug_short = item["drug_short"].ToString(),
                    sizes = item["sizes"].ToString(),
                    unit = item["unit"].ToString(),
                    price = item["price"].ToString(),
                    money_type = item["money_type"].ToString(),
                    producer = item["producer"].ToString(),
                    dose = item["dose"].ToString(),
                    usage = item["usage"].ToString(),
                    summary = item["summary"].ToString(),
                    ext = item["ext"].ToString(),
                });
            }

            DataTable projectData = SelectTable(@"SELECT * FROM `t_project` WHERE t_project.item_name_py LIKE ""%PT%"" LIMIT 1,10;");

            List<Project> project = new List<Project>();
            foreach (DataRow item in projectData.Rows)
            {
                project.Add(new Project
                {
                    hospital_no = item["hospital_no"].ToString(),
                    hospital_name= item["hospital_name"].ToString(),
                    item_id = item["item_id"].ToString(),
                    item_name = item["item_name"].ToString(),
                    item_type = item["item_type"].ToString(),
                    item_short = item["item_short"].ToString(),
                    sizes = item["sizes"].ToString(),
                    unit = item["unit"].ToString(),
                    price = item["price"].ToString(),
                    money_type = item["money_type"].ToString(),
                    ext = item["ext"].ToString(),
                });
            }

            Console.ReadKey();
        }

        public void CreateDatabase(string sqlStr)
        {
            string str = $"Server=localhost;User=root;Password=123456;CharSet=UTF8;";
            using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnection))
            {
                mySqlConnection.Open();
                try 
                {
                    MySqlCommand cmd = new MySqlCommand(sqlStr, mySqlConnection);
                    cmd.ExecuteNonQuery();
                } catch(Exception e) 
                {
                    Debug.Log(e.Message.ToString());
                }
                finally
                {
                    mySqlConnection.Close();
                }
            }
	    } 

        private static DataTable SelectTable(string sqlStr)
        {
            DataTable dt = new DataTable();
            using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnectStr))
            {
                mySqlConnection.Open();
                try
                {
                    MySqlDataAdapter da = new MySqlDataAdapter(sqlStr, mySqlConnection);
                    da.Fill(dt);
                    return dt;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    mySqlConnection.Close();
                }
            }
        }

        /// <summary>
        /// 执行 插入药品、项目数据
        /// </summary>
        private static void SQLCMD()
        {
            #region 药品

            var drugjsonPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"drug.json");
            var drugJsonStr = File.ReadAllText(drugjsonPath);
            Rootobject<List<Drug>> drugs = JsonConvert.DeserializeObject<Rootobject<List<Drug>>>(drugJsonStr);
            string drugSql = @"INSERT INTO T_drugs (drug_id,drug_name,drug_type,sizes,unit,price,money_type,producer) VALUE ";
            foreach (var drug in drugs.data)
            {
                drugSql += $"(\"{drug.drug_id}\",\"{drug.drug_name}\",\"{drug.drug_type}\",\"{drug.sizes}\",\"{drug.unit}\",\"{drug.price}\",\"{drug.money_type}\",\"{drug.producer}\"),";
            }
            drugSql = $"{drugSql.Remove(drugSql.Length - 1, 1)};";
            if (ExecuteSqlTransaction(drugSql))
            {
                Console.WriteLine("执行成功!");
            }
            else
            {
                Console.WriteLine("执行失败!");
            }

            #endregion

            #region 项目

            var projectjsonPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"project.json");
            var projectJsonStr = File.ReadAllText(projectjsonPath);
            Rootobject<List<Project>> projects = JsonConvert.DeserializeObject<Rootobject<List<Project>>>(projectJsonStr);
            string projectSql = @"INSERT INTO T_project (item_id,item_name,unit,price) VALUE ";
            foreach (var project in projects.data)
            {
                projectSql += $"(\"{project.item_id}\",\"{project.item_name}\",\"{project.unit}\",\"{project.price}\"),";
            }
            projectSql = $"{projectSql.Remove(projectSql.Length - 1, 1)};";
            if (ExecuteSqlTransaction(projectSql))
            {
                Console.WriteLine("执行成功!");
            }
            else
            {
                Console.WriteLine("执行失败!");
            }
            #endregion
        }

        /// <summary>
        /// 创建 药品、项目表
        /// </summary>
        private static void CreateTable()
        {
            string t_drugSql = @"USE xzd;
                                CREATE TABLE IF NOT EXISTS T_drugs
                                (
	                                `hospital_no` VARCHAR(20),
	                                `hospital_name` VARCHAR(50),
	                                `drug_id` VARCHAR(50),
	                                `drug_name` VARCHAR(50),
	                                `drug_name_py` VARCHAR(50),
	                                `drug_type` VARCHAR(10),
	                                `drug_short` VARCHAR(10),
	                                `sizes` VARCHAR(10),
	                                `unit` VARCHAR(10),
	                                `price` VARCHAR(10),
	                                `money_type` VARCHAR(50),
	                                `producer` VARCHAR(100),
	                                `dose` VARCHAR(10),
	                                `usage` VARCHAR(10),
	                                `summary` VARCHAR(50),
	                                `ext` VARCHAR(50)
                                )ENGINE=INNODB DEFAULT CHARSET=utf8;";

            string t_project = @"USE xzd;
                                CREATE TABLE IF NOT EXISTS T_project
                                (
                                 `hospital_no` VARCHAR(20),
                                 `hospital_name` VARCHAR(50),
                                 `item_id` VARCHAR(50),
                                 `item_name` VARCHAR(50),
                                 `item_name_py` VARCHAR(50),
                                 `item_type` VARCHAR(10),
                                 `item_short` VARCHAR(10),
                                 `sizes` VARCHAR(10),
                                 `unit` VARCHAR(30),
                                 `price` VARCHAR(10),
                                 `money_type` VARCHAR(50),
                                 `ext` VARCHAR(50)
                                )ENGINE=INNODB DEFAULT CHARSET=utf8;";


            CteateDataTable(t_drugSql);
            CteateDataTable(t_project);
        }

        /// <summary>
        /// 执行创建表sql
        /// </summary>
        /// <param name="sqlStr"></param>
        private static void CteateDataTable(string sqlStr)
        {
            using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnectStr))
            {
                mySqlConnection.Open();
                MySqlCommand cmd = new MySqlCommand(sqlStr, mySqlConnection);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    mySqlConnection.Close();
                }
            }
        }

        /// <summary>
        /// mysql事务
        /// </summary>
        /// <param name="sqlStr"></param>
        /// <exception cref="Exception"></exception>
        private static bool ExecuteSqlTransaction(string sqlStr)
        {
            using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnectStr))
            {
                mySqlConnection.Open();
                MySqlCommand cmd = mySqlConnection.CreateCommand();
                cmd.Connection = mySqlConnection;

                MySqlTransaction sqlTransaction = mySqlConnection.BeginTransaction();
                try
                {
                    cmd.CommandText = sqlStr;
                    cmd.ExecuteNonQuery();
                    sqlTransaction.Commit();
                    sqlTransaction = mySqlConnection.BeginTransaction();
                    return true;
                }
                catch (Exception ex)
                {
                    sqlTransaction.Rollback();
                    return false;
                }
                finally
                {
                    mySqlConnection.Close();
                }
            };

        }

        /// <summary>
        /// 删除表所有数据
        /// </summary>
        /// <returns></returns>
        private static bool DeleteTableDataAll()
        {
            string sqlStr = @"DELETE FROM T_drugs; DELETE FROM T_project;";
            using (MySqlConnection mySqlConnection = new MySqlConnection(mySqlConnectStr))
            {
                mySqlConnection.Open();
                MySqlCommand cmd = new MySqlCommand(sqlStr, mySqlConnection);
                try
                {
                    cmd.ExecuteNonQuery();                   
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                    throw new Exception(ex.Message);
                }
                finally
                {
                    mySqlConnection.Close();
                }
            }
        }
    }

    #region 实体

    /// <summary>
    /// 包装类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class Rootobject<T>
    {
        public string code { get; set; }
        public T data { get; set; }
    }

    /// <summary>
    /// 药品
    /// </summary>
    public class Drug
    {
        public string hospital_no { get; set; }
        public string hospital_name { get; set; }
        public string drug_id { get; set; }
        public string drug_name { get; set; }
        public string drug_type { get; set; }
        public string drug_short { get; set; }
        public string sizes { get; set; }
        public string unit { get; set; }
        public string price { get; set; }
        public string money_type { get; set; }
        public string producer { get; set; }
        public string dose { get; set; }
        public string usage { get; set; }
        public string summary { get; set; }
        public string ext { get; set; }
    }

    /// <summary>
    /// 项目
    /// </summary>
    public class Project
    {
        public string hospital_no { get; set; }
        public string hospital_name { get; set; }
        public string item_id { get; set; }
        public string item_name { get; set; }
        public string item_type { get; set; }
        public string item_short { get; set; }
        public string sizes { get; set; }
        public string unit { get; set; }
        public string price { get; set; }
        public string money_type { get; set; }
        public string ext { get; set; }
    }

    #endregion
}

到此这篇关于一文带你了解C#操作MySql的方法的文章就介绍到这了,更多相关C#操作MySql内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# WebApi 异常处理解决方案

    C# WebApi 异常处理解决方案

    这篇文章主要介绍了C# WebApi 异常处理解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍

    一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能
    2013-10-10
  • Unity通过代码修改按钮点击效果

    Unity通过代码修改按钮点击效果

    这篇文章主要为大家详细介绍了Unity通过代码修改按钮点击效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • 详解C# ConcurrentBag的实现原理

    详解C# ConcurrentBag的实现原理

    ConcurrentBag<T>实现了IProducerConsumerCollection<T>接口,该接口主要用于生产者消费者模式下,可见该类基本就是为生产消费者模式定制的。然后还实现了常规的IReadOnlyCollection<T>类,实现了该类就需要实现IEnumerable<T>、IEnumerable、 ICollection类
    2021-06-06
  • C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解

    C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解

    本文介绍通过C#和VB.NET程序代码来创建和编辑PPT文档中的SmartArt图形。文中将分两个操作示例来演示创建和编辑结果,需要的朋友可以参考下
    2020-10-10
  • C#中List<T>存放元素的工作机制

    C#中List<T>存放元素的工作机制

    这篇文章介绍了C#中List<T>存放元素的工作机制,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • WinForm特效之桌面上的遮罩层实现方法

    WinForm特效之桌面上的遮罩层实现方法

    这篇文章主要介绍了WinForm特效之桌面上的遮罩层实现方法,是一个非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • C#中CheckedListBox控件的用法实例

    C#中CheckedListBox控件的用法实例

    最近用到checklistbox控件,在使用其过程中,花了较多的时间,这里我收集了其相关的代码段,希望对大家有所帮助,下面这篇文章主要给大家介绍了关于C#中CheckedListBox控件用法的相关资料,需要的朋友可以参考下
    2021-11-11
  • C#获取程序文件相关信息的方法

    C#获取程序文件相关信息的方法

    这篇文章主要介绍了C#获取程序文件相关信息的方法,可实现获取程序版本号、版权声明、程序文本信息等,需要的朋友可以参考下
    2014-09-09
  • C#中Dynamic和Dictionary性能比较

    C#中Dynamic和Dictionary性能比较

    开发中需要传递变参,考虑使用 dynamic 还是 Dictionary,dynamic 的编码体验显著优于 Dictionary,如果性能差距不大的话,我会选择使用dynamic。下面通过本文给大家详细介绍下C#中Dynamic和Dictionary性能比较,一起看看吧
    2016-11-11

最新评论