Files
IOT/ORM/DatabaseConfig.cs
2026-01-14 11:22:58 +08:00

133 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using SqlSugar;
using System;
using System.IO;
using System.Security.Cryptography;
namespace ORM
{
public class DatabaseConfig
{
/// <summary>
/// 数据库连接类型
/// </summary>
public static DbType DbConnectionType { get; private set; }
/// <summary>
/// SQLite 数据库文件路径
/// </summary>
public static string DbConnectionString { get; private set; }
/// <summary>
/// 数据租户Id
/// </summary>
public static int TenantId { get; private set; }
/// <summary>
/// 雪花算法DatacenterId值范围0至31
/// </summary>
public static int SnowFlakeDatacenterId { get; private set; }
/// <summary>
/// 雪花算法WorkID值范围0至31
/// </summary>
public static int SnowFlakeWorkId { get; private set; }
#region
public static void InitSqlite()
{
DbConnectionType = DbType.Sqlite;
// 获取程序运行目录
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
// 确保 SQLDB 文件夹存在
string folder = Path.Combine(baseDir, "SQLDB");
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
// 拼接数据库文件路径
string DBPath = Path.Combine(folder, "SQL.db");
DbConnectionString = $"Data Source={DBPath};Version=3;";
}
public static void InitMySql(string Server, int Port, string Database, string Uid,string Pwd)
{
DbConnectionType = DbType.MySql;
DbConnectionString =
$"Server={Server};Port={Port};Database={Database};Uid={Uid};Pwd={Pwd};";
}
public static void InitSqlServer(string server,int port,string database,string user,string password)
{
DbConnectionType = DbType.SqlServer;
DbConnectionString =
$"Data Source={server},{port};Initial Catalog={database};user={user};Password={password};";
}
public static void InitSqlServerLocalDb()
{
DbConnectionType = DbType.SqlServer;
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
// 确保 SQLDB 文件夹存在
string folder = Path.Combine(baseDir, "SQLDB");
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
// 拼接数据库文件路径
string DBPath = Path.Combine(folder, "SQL.db");
DbConnectionString =$@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog={DBPath};Integrated Security=True;";
}
#endregion
/// <summary>
/// 设置数据库连接字符串(可手动覆盖)
/// </summary>
public static void SetDbConnection(string strConnection)
{
if (string.IsNullOrEmpty(strConnection))
{
throw new Exception("数据库连接字符串为空");
}
DbConnectionString = strConnection;
}
/// <summary>
/// 设置数据租户Id
/// </summary>
public static void SetTenant(int nTenantId)
{
if (nTenantId <= 10000)
{
throw new Exception("数据租户Id值需大于10000");
}
TenantId = nTenantId;
SetSnowFlake((nTenantId - 10000) % 1024);
}
/// <summary>
/// 将指定数字转换为雪花算法DatacenterId和WorkID
/// </summary>
private static void SetSnowFlake(int nSnowFlakeId)
{
if (nSnowFlakeId > 1023 || nSnowFlakeId < 0)
{
throw new Exception("雪花算法机器码值范围0至1023");
}
SnowFlakeDatacenterId = nSnowFlakeId >> 5;
SnowFlakeWorkId = nSnowFlakeId & 31;
}
/// <summary>
/// 检测数据库连接
/// </summary>
public static void CreateDatabaseAndCheckConnection(bool createDatabase = false, bool checkConnection = false)
{
//数据库不存在则创建数据库
if (createDatabase)
{
SqlSugarContext.DbContext.DbMaintenance.CreateDatabase();
}
// 检查数据库连接
if (checkConnection && !SqlSugarContext.DbContext.Ado.IsValidConnection())
{
throw new Exception("连接数据库失败");
}
}
}
}