C# 利用 ADO.NET 操作 MySQL 数据库

首先给大家看一下这个小项目的结构(一个 WebAPI 的小项目):

上面红框里的文件是这篇文章所涉及的主要文件。

首先在你的项目中添加 MySQL 的支持,在 NuGet 上搜索 MySql 并安装第三方库(不要选错了哟~),如下图:

创建一个MySQL数据库连接信息实体类,这个类会替代我们常用的连接字符串,而且可以实现对各个参数的配置、热修改。

/// <summary> MySQL数据库连接信息实体类
    /// </summary>
    public class MySqlDBConnectInfo
    {
        /// <summary> 唯一别名(用来区分是哪个链接,推荐策略:服务地址-数据库名)
        /// </summary>
        public string UniqueAlias { get; set; }

        /// <summary> 数据库服务连接地址,例:"127.0.0.1"
        /// </summary>
        public string Server { get; set; }

        /// <summary> 数据库服务连接端口号
        /// </summary>
        public uint Port { get; set; }

        /// <summary> 连接的数据库
        /// </summary>
        public string Database { get; set; }

        /// <summary> 连接数据库的用户名
        /// </summary>
        public string UserID { get; set; }

        /// <summary> 用户密码
        /// </summary>
        public string Password { get; set; }

        /// <summary> 设置字符编码,例:"utf8"
        /// </summary>
        public string CharacterSet { get; set; }

        /// <summary> 连接超时时间,单位秒
        /// </summary>
        public uint ConnectionTimeout { get; set; }

        /// <summary> 数据库执行超时时间,单位秒
        /// </summary>
        public uint DefaultCommandTimeout { get; set; }

        /// <summary> 是否开启连接池,true
        /// </summary>
        public bool Pooling { get; set; }

        /// <summary> 连接池中最小连接数
        /// </summary>
        public uint MinimumPoolSize { get; set; }

        /// <summary> 连接池中最大连接数
        /// </summary>
        public uint MaximumPoolSize { get; set; }

        /// <summary> 连接池中连接对象存活时间,单位秒
        /// </summary>
        public uint ConnectionLifeTime { get; set; }

        /// <summary> 连接是否使用压缩,true
        /// </summary>
        public bool UseCompression { get; set; }

        /// <summary> 表示连接池程序是否会自动登记创建线程的当前事务语境中的连接,ture
        /// </summary>
        public bool AutoEnlist { get; set; }

    }

 新建一个类 StartupInitMySqlConfig,用来控制程序启动时初始化MySQL数据库配置信息

/// <summary> 启动时初始化MySQL数据库配置信息
    /// </summary>
    public static class StartupInitMySqlConfig
    {

        /// <summary> 数据库连接信息配置文件 的 文件名 (MySqlConnectionConfig.xml)
        /// </summary>
        private const string MySqlDBConnectConfigFilename = "MySqlConnectionConfig.xml";


        /// <summary> 唯一别名 的 存储值
        /// </summary>
        private static string UniqueAliasSV = string.Empty;

        /// <summary>
        /// 唯一别名 锁;避免同时被修改
        /// </summary>
        private static readonly object _uniqueAliasLock = new object();


        /// <summary> 唯一别名(用来区分是哪个链接,推荐策略:服务地址_数据库名)
        /// </summary>
        private static string uniqueAlias = string.Empty;

        /// <summary> 唯一别名(用来区分是哪个链接,推荐策略:服务地址_数据库名)
        /// </summary>
        public static string UniqueAlias
        {
            get { return uniqueAlias; }
            set
            {
                uniqueAlias = value == null ? string.Empty : value;
            }
        }


        /// <summary> 声明一个[MySqlDBConnectInfo]数据库连接信息对象
        /// </summary>
        private static MySqlDBConnectInfo dbConnectInfo;

        /// <summary> 获取[MySqlDBConnectInfo]数据库连接信息对象(默认取配置文件中的第一个连接对象)
        /// </summary>
        public static MySqlDBConnectInfo DbConnectInfo
        {
            get
            {
                try
                {
                    lock (_uniqueAliasLock)
                    {
                        try
                        {
                            if (dbConnectInfo == null || UniqueAlias != UniqueAliasSV)
                            {
                                UniqueAliasSV = UniqueAlias;
                                string path = AppDomain.CurrentDomain.BaseDirectory + MySqlDBConnectConfigFilename;
                                if (!File.Exists(path))
                                {
                                    dbConnectInfo = null;
                                    throw new Exception("系统找不到数据库连接信息配置文件。");
                                }
                                else
                                {
                                    List<MySqlDBConnectInfo> dbConnectInfoList = XmlTool.XmlFlieToTObject<List<MySqlDBConnectInfo>>(path, Encoding.UTF8);
                                    if (string.IsNullOrWhiteSpace(UniqueAliasSV))
                                    {
                                        dbConnectInfo = dbConnectInfoList[0];
                                    }
                                    else
                                    {
                                        foreach (MySqlDBConnectInfo item in dbConnectInfoList)
                                        {
                                            if (item.UniqueAlias == UniqueAliasSV)
                                            {
                                                dbConnectInfo = item;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            dbConnectInfo = null;
                            throw new Exception("数据库连接信息配置文件[MySqlConfig.xml]转数据库连接信息对象[MySqlDBConnectInfo]时失败。\r\n" + ex.ToString());
                        }
                    }
                }
                catch (Exception ex)
                {
                    dbConnectInfo = null;
                    throw new Exception("数据库连接信息配置文件[MySqlConfig.xml]转数据库连接信息对象[MySqlDBConnectInfo]时失败。\r\n" + ex.ToString());
                }
                return dbConnectInfo;
            }
            set { dbConnectInfo = value; }
        }


    }

下面是一个 MySQL数据库操作工具类【核心功能都在这】

/// <summary> MySQL数据库操作工具类
    /// </summary>
    public class MySqlTool
    {

        /// <summary> 声明一个[MySqlDBConnectInfo]数据库连接信息对象
        /// </summary>
        private MySqlDBConnectInfo mysqlDbConnectInfo;

        /// <summary> 无参构造函数(获取 MySqlConfig.xml 配置文件中的第一个连接对象)
        /// </summary>
        public MySqlTool()
        {
            StartupInitMySqlConfig.UniqueAlias = string.Empty;
            mysqlDbConnectInfo = StartupInitMySqlConfig.DbConnectInfo;
        }

        /// <summary> 有参构造函数(获取 MySqlConfig.xml 配置文件中 UniqueAlias 参数所匹配的唯一别名的连接对象)
        /// </summary>
        /// <param name="uniqueAlias">连接对象的唯一别名,用来区分是哪个链接对象</param>
        public MySqlTool(string uniqueAlias)
        {
            StartupInitMySqlConfig.UniqueAlias = uniqueAlias;
            mysqlDbConnectInfo = StartupInitMySqlConfig.DbConnectInfo;
        }


        /// <summary> 声明一个[MySqlConnection]连接对象
        /// </summary>
        private MySqlConnection mysqlConnection;

        /// <summary> 获取[MySqlConnection]连接对象
        /// </summary>
        private MySqlConnection MysqlConnection
        {
            get
            {
                if (mysqlDbConnectInfo == null)
                {
                    mysqlDbConnectInfo = StartupInitMySqlConfig.DbConnectInfo;
                }
                if (mysqlConnection == null)
                {
                    try
                    {
                        MySqlConnectionStringBuilder connectStr = new MySqlConnectionStringBuilder();

                        connectStr.Server = mysqlDbConnectInfo.Server;
                        connectStr.Port = mysqlDbConnectInfo.Port;
                        connectStr.Database = mysqlDbConnectInfo.Database;
                        connectStr.UserID = mysqlDbConnectInfo.UserID;
                        connectStr.Password = mysqlDbConnectInfo.Password;
                        connectStr.CharacterSet = mysqlDbConnectInfo.CharacterSet;
                        connectStr.ConnectionTimeout = mysqlDbConnectInfo.ConnectionTimeout;
                        connectStr.DefaultCommandTimeout = mysqlDbConnectInfo.DefaultCommandTimeout;
                        connectStr.Pooling = mysqlDbConnectInfo.Pooling;
                        connectStr.MinimumPoolSize = mysqlDbConnectInfo.MinimumPoolSize;
                        connectStr.MaximumPoolSize = mysqlDbConnectInfo.MaximumPoolSize;
                        connectStr.ConnectionLifeTime = mysqlDbConnectInfo.ConnectionLifeTime;
                        connectStr.UseCompression = mysqlDbConnectInfo.UseCompression;
                        connectStr.AutoEnlist = mysqlDbConnectInfo.AutoEnlist;

                        mysqlConnection = new MySqlConnection(connectStr.GetConnectionString(true));
                    }
                    catch (Exception ex)
                    {
                        mysqlConnection = null;
                        throw new Exception("创建数据库连接时发生异常。\r\n" + ex.ToString());
                    }
                }
                return mysqlConnection;
            }
        }

        /// <summary> 获取当前对象已存在的连接信息[MySqlDBConnectInfo]
        /// </summary>
        /// <returns></returns>
        public MySqlDBConnectInfo GetMySqlConnectInfo()
        {
            return mysqlDbConnectInfo;
        }


        /// <summary> 打开数据库连接
        /// </summary>
        public void OpenConnect()
        {
            if (MysqlConnection.State == ConnectionState.Closed)
            {
                try
                {
                    MysqlConnection.Open();
                }
                catch (Exception ex)
                {
                    StartupInitMySqlConfig.DbConnectInfo = null;
                    throw new Exception("打开数据库连接时发生异常。\r\n" + ex.ToString());
                }
            }
            else if (MysqlConnection.State == ConnectionState.Broken)
            {
                try
                {
                    MysqlConnection.Close();
                    MysqlConnection.Open();
                }
                catch (Exception ex)
                {
                    StartupInitMySqlConfig.DbConnectInfo = n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值