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修饰的属性,那么就不可以显式的写无参的构造函数。
        //}


    }


}
相关推荐
2601_9521963615 小时前
计算机科学与技术专业应届生投商业分析岗,需要哪些额外能力?
数据库·oracle
皮皮学姐分享-ppx16 小时前
地级市、省级人才政策强度测算(2000-2025)
大数据·数据库·人工智能·百度·高考
晚安日记wanna16 小时前
大厂禁 JOIN 的真正原因,拆到第四层才清楚
数据库·后端·面试
Chen—LSN16 小时前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
java1234_小锋16 小时前
Redis 宣布正式接入 AI
数据库·人工智能·redis
这个DBA有点耶16 小时前
数据融合平台的下一代形态:数据库内核自己就能融合,为什么还要ETL?
数据库·架构·aigc
数据库小学妹16 小时前
MySQL大表怎么优化?2亿行表的分区归档与冷热分离实战
数据库·mysql·分库分表·分区表·数据库运维·冷热分离
91刘仁德17 小时前
RAG实战 - 向量数据库(Milvus)
数据库·milvus
资深技术分享员17 小时前
Geejing WebBuilder 日志、在线用户、系统监控,出问题时的三个第一现场
java·运维·数据库
我是小白呀17 小时前
n8n 实战:把 AcmeFlow 的 READY 事件接到 CRM 通知
数据库·人工智能·workflow