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


    }


}
相关推荐
₍˄·͈༝·͈˄*₎◞ ̑̑码7 小时前
MyBatis操作数据库
数据库·mybatis
淡海水8 小时前
08-03-不可变-ImmutableDictionary-TKey-TValue-与ImmutableHashSet-T-持久化哈希树
数据结构·算法·c#·哈希算法·dictionary·immutable
刃神太酷啦9 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
丁丁点灯o9 小时前
Oracle中使用外键的场景及不适用外键的情况
数据库·oracle
天天进步20159 小时前
Pixelle-Video 源码解析 #18:声音克隆功能:参考音频如何影响解说效果?
数据库·音视频
不懂的浪漫10 小时前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
布莱克60510 小时前
Redis 详解:从核心数据结构到高可用架构
数据库
典典分享指南11 小时前
一品牌多产品线的 GEO 内容矩阵:从策略到落地
java·c#·bash·symfony
今夜有雨.11 小时前
C# 学习文档(零基础入门)
开发语言·学习·c#
冰暮流星11 小时前
mysql之左外连接与右外连接
数据库·sql