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


    }


}
相关推荐
黄色茶杯20 分钟前
AI编程工具TRAE解决日常问题之SQLite数据复制
数据库·sqlite
老华带你飞36 分钟前
订票系统|车票管理系统|基于Java+vue的车票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·订票系统
星光一影38 分钟前
悬赏任务平台/拉新地推系统源码
redis·mysql·小程序·php·uniapp·html5
weixin_wx520-198338 分钟前
骑士人才网全系与phpyun人才网系统数据转移或互转的技术文档和要领,和大家一起共勉
数据库·骑士人才网开源版·骑士人才网数据转移·phpyun人才网源码
聆风吟º38 分钟前
国产化数据库选型深度剖析:金仓KES与达梦DM全生命周期成本对比
数据库·kingbasees
码农阿豪39 分钟前
金仓KES vs. 达梦DM:全面对比解析迁移、运维与授权成本
运维·数据库·国产
2501_930707781 小时前
使用C#代码添加或删除PPT页面
开发语言·c#·powerpoint
qqxhb2 小时前
系统架构设计师备考第67天——数据库系统的安全&系统架构的脆弱性
数据库·安全·系统架构·访问控制·完整性·脆弱性·身份鉴别
百锦再2 小时前
金仓数据库提出“三低一平”的迁移理念
开发语言·数据库·后端·python·rust·eclipse·pygame
卡卡酷卡BUG2 小时前
2025年Java面试题及详细解答(MySQL篇)
java·开发语言·mysql