C#控制台连接Mysql数据库,有配置数据库连接字符串的配置文件
实现功能
- 读取.
.txt
中的配置文件,来初始化连接字符串 - 让连接字符串的配置文件不存在会主动创建默认的连接字符串
注意点:
- 需要引用Newtonsoft
- 使用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修饰的属性,那么就不可以显式的写无参的构造函数。
//}
}
}