C#控制台连接Mysql数据库,有配置数据库连接字符串的配置文件

C#控制台连接Mysql数据库,有配置数据库连接字符串的配置文件

实现功能

  1. 读取..txt 中的配置文件,来初始化连接字符串
  2. 让连接字符串的配置文件不存在会主动创建默认的连接字符串

注意点:

  1. 需要引用Newtonsoft
  2. 使用mysql

代码如下

复制代码
using System;
using MySql.Data.MySqlClient;
using Newtonsoft.Json;


namespace 连接数据库
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath = AppDomain.CurrentDomain.BaseDirectory + "ConnectionStrConfig.txt";//设置文件路径
            if (!System.IO.File.Exists(filePath))//判断文件是否存在
            {
                Console.WriteLine("文件不存在!已创建新的文件,请重启程序");
                System.IO.File.CreateText(filePath);//创建文件
                System.IO.File.WriteAllText(filePath, CreateDefaultConnectionString());//写入文件内容,默认的数据库配置文件
                return;//程序退出
            }

            string configFile = System.IO.File.ReadAllText(filePath);//读取文件内容
            if (configFile.Length == 0)//文件内容是空的
            {
                Console.WriteLine("没有读取到内容");
                System.IO.File.WriteAllText(filePath, CreateDefaultConnectionString());//写入文件内容,默认的数据库配置文件
                return;
            }

            Console.WriteLine(configFile);
            ConnectionStrConfig connectionStrConfig;
            try
            {
                connectionStrConfig = JsonConvert.DeserializeObject<ConnectionStrConfig>(configFile);//将读取到的内容转成配置文件的对象
            }
            catch (Exception e)
            {
                Console.WriteLine("Josn 序列化失败,检查配置文件");//转换失败
                Console.ReadKey();
                return;
            }

            if (connectionStrConfig.Database == null)
            {
                Console.WriteLine("Josn 序列化失败,检查配置文件");//转换失败
                return;
            }


            // 与数据库连接的信息
            MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
            //用户名
            builder.UserID = connectionStrConfig.UserID;
            //密码
            builder.Password = connectionStrConfig.Password;
            //服务器地址
            builder.Server = connectionStrConfig.Server;
            //连接时的数据库
            builder.Database = connectionStrConfig.Database;
            //设置端口号
            builder.Port = connectionStrConfig.Port;
            //定义与数据连接的链接
            MySqlConnection connection = new MySqlConnection(builder.ConnectionString);
            //打开这个链接
            connection.Open();
            //connection.OpenAsync();

            Console.WriteLine("这是一个控制台程序");
            Console.WriteLine("这是一个控制台程序,数据库连接完成");

            Console.ReadKey();
            connection.Close();//数据库连接关闭
            //connection.CloseAsync();

            Console.WriteLine("数据库连接断开");
            Console.ReadKey();

        }


        /// <summary>
        /// 创建默认的连接字符串
        /// </summary>
        /// <returns>默认的配置文件的string</returns>
        static string CreateDefaultConnectionString()
        {
            string defaultString = "";//默认连接字符串的配置文件
            ConnectionStrConfig connectionStrConfig = new ConnectionStrConfig("root", "root", "localhost", "testdatabase", 3308);//通过"构造函数" 创建默认的连接字符串的配置文件
            defaultString = JsonConvert.SerializeObject(connectionStrConfig);//Json序列化为string
            return defaultString;
        }

    }


    [Serializable]
    class ConnectionStrConfig
    {
        private string userid;
        private string password;
        private string server;
        private string database;
        private uint port;


        /// <summary>
        /// 用户名
        /// </summary>
        public string UserID
        {
            get
            {
                return userid;
            }
            private set
            {
                userid = value;
            }
        }

        /// <summary>
        /// 密码
        /// </summary>
        public string Password
        {
            get
            {
                return password;
            }
            private set
            {
                password = value;
            }
        }

        /// <summary>
        /// 服务地址
        /// </summary>
        public string Server
        {
            get
            {
                return server;
            }
            private set
            {
                server = value;
            }
        }

        /// <summary>
        /// 数据库名称
        /// </summary>
        public string Database
        {
            get
            {
                return database;
            }
            private set
            {
                database = value;
            }
        }

        /// <summary>
        /// 端口号
        /// </summary>
        public uint Port
        {
            get
            {
                return port;
            }
            private set
            {
                port = value;
            }
        }


        /// <summary>
        /// 数据库连接字符串的配置文件
        /// </summary>
        /// <param name="userid">用户名</param>
        /// <param name="password">密码</param>
        /// <param name="server">服务</param>
        /// <param name="database">数据库名称</param>
        /// <param name="port">端口号</param>
        public ConnectionStrConfig(string userid
        , string password,
        string server,
        string database,
        uint port)
        {
            this.userid = userid;
            this.password = password;
            this.server = server;
            this.database = database;
            this.port = port;
        }


        //public ConnectionStrConfig()
        //{
        当反序列化对象的时候,被反序列化的对象如果有get或者set修饰的属性,那么就不可以显式的写无参的构造函数。
        //}


    }


}
相关推荐
JavaGuide11 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
怒放吧德德14 小时前
MySQL篇:MySQL主从集群同步延迟问题
后端·mysql·面试
数据智能老司机15 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
Eip不易也不e15 小时前
教程之同时安装两个版本的 mysql
mysql
数据智能老司机15 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
“抚琴”的人15 小时前
【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】
c#·工业相机·visionpro·机械视觉
松果猿15 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
Kagol16 小时前
macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库
redis·后端·mysql
无名之逆16 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010116 小时前
rust 同时处理多个异步任务
java·数据库·rust