리크 테스트 gui
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
5.3 KiB

using System;
using System.IO;
namespace Housing.Services
{
public class DatabaseSettings
{
public string Db_Server { get; set; } = string.Empty;
public string Db_Name { get; set; } = string.Empty;
public string Db_User { get; set; } = string.Empty;
public string Db_Password { get; set; } = string.Empty;
public static string GetDefaultFilePath()
{
string folder = AppDomain.CurrentDomain.BaseDirectory;
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}
return Path.Combine(folder, "Database.ini");
}
private string _rawConnectionString = string.Empty;
public string ConnectionString
{
get
{
// 개별 설정이 모두 지정되어 있는 경우 조합해서 사용
if (!string.IsNullOrWhiteSpace(Db_Server) &&
!string.IsNullOrWhiteSpace(Db_Name) &&
!string.IsNullOrWhiteSpace(Db_User) &&
!string.IsNullOrWhiteSpace(Db_Password))
{
return $"Server={Db_Server};Database={Db_Name};User Id={Db_User};Password={Db_Password};";
}
// 없으면 레거시 ConnectionString 필드를 그대로 사용
return _rawConnectionString;
}
set
{
_rawConnectionString = value;
}
}
private static readonly object _dbLock = new object();
private static DatabaseSettings _cachedSettings;
private static DateTime _lastWriteTime;
private static string _cachedPath;
public static DatabaseSettings Load(string path)
{
lock (_dbLock)
{
try
{
if (File.Exists(path))
{
var currentWriteTime = File.GetLastWriteTime(path);
if (_cachedSettings != null && _cachedPath == path && _lastWriteTime == currentWriteTime)
{
return _cachedSettings;
}
var settings = new DatabaseSettings();
var lines = File.ReadAllLines(path);
foreach (var line in lines)
{
var trimmed = line.Trim();
// 주석 행 스킵
if (trimmed.StartsWith(";") || trimmed.StartsWith("#"))
{
continue;
}
if (trimmed.StartsWith("ConnectionString", StringComparison.OrdinalIgnoreCase))
{
var parts = trimmed.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
settings.ConnectionString = parts[1].Trim();
}
}
else if (trimmed.StartsWith("Db_Server", StringComparison.OrdinalIgnoreCase))
{
var parts = trimmed.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
settings.Db_Server = parts[1].Trim();
}
}
else if (trimmed.StartsWith("Db_Name", StringComparison.OrdinalIgnoreCase))
{
var parts = trimmed.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
settings.Db_Name = parts[1].Trim();
}
}
else if (trimmed.StartsWith("Db_User", StringComparison.OrdinalIgnoreCase))
{
var parts = trimmed.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
settings.Db_User = parts[1].Trim();
}
}
else if (trimmed.StartsWith("Db_Password", StringComparison.OrdinalIgnoreCase))
{
var parts = trimmed.Split(new[] { '=' }, 2);
if (parts.Length == 2)
{
settings.Db_Password = parts[1].Trim();
}
}
}
_cachedSettings = settings;
_lastWriteTime = currentWriteTime;
_cachedPath = path;
return settings;
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"[DatabaseSettings Load Error] {ex.Message}");
}
return _cachedSettings ?? new DatabaseSettings();
}
}
}
}