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.
122 lines
5.0 KiB
122 lines
5.0 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;
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|