728x90
반응형
안녕하세요. 오늘은 기존에 올렸던 블로그의 클래스를 고도화해서 다시 올려봅니다.
고도화 주제는 다음과 같습니다.
1. 인터페이스를 통해 클래스를 사용하는 위치에서 외부 참조를 사용하지 않게 한다.
2. 불특정 객체를 반환할 수 있도록 한다.
외부참조 사용하지 않게하기
IDBConnection은 범용적으로 모든 DB에서 인터페이스로 사용할 수 있습니다. 다만 DB별로 Connection String이 다르기 때문에 아래처럼 번잡하죠. 하지만 사용하는 곳에서 쉽게 사용할 수 있습니다.
public IDbConnection SimpleDBConnection()
{
try
{
if (!CheckValidationDB()) return null;
if (this.DBCfg.DBType == (int)DB_TYPE.SQLite)
{
if (conn != null)
return conn;
// Connection String 반환
var connStr = new SQLiteConnectionStringBuilder(string.Format(@"Data Source={0};Version=3", DBCfg.DBFile))
{
JournalMode = SQLiteJournalModeEnum.Wal
}.ToString();
conn = new SQLiteConnection(connStr);
//ExecuteQuery("PRAGMA cache_size=10000;"); // 이거 하면 왜 죽냐?
return conn;
}
else if (DBCfg.DBType == (int)DB_TYPE.PostgreSQL)
{
if (conn != null && conn.State == ConnectionState.Open)
{
return conn;
}
else
{
string connStr = string.Format("User ID={0};Password={1};Host={2};Port={3};Database={4};",
DBCfg.UserID, DBCfg.UserPw, DBCfg.DBHost, DBCfg.DBPort, DBCfg.DBName);
conn = new NpgsqlConnection(connStr);
if (conn != null)
{
conn.Open();
}
return conn;
}
}
else if (DBCfg.DBType == (int)DB_TYPE.MySQL)
{
if (conn != null && conn.State == ConnectionState.Open)
{
return conn;
}
else
{
string connStr = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4}",
DBCfg.DBHost, DBCfg.DBPort, DBCfg.DBName, DBCfg.UserID, DBCfg.UserPw);
conn = new MySqlConnection(connStr);
if (conn != null)
{
conn.Open();
}
return conn;
}
}
else if (DBCfg.DBType == (int)DB_TYPE.MSSQL)
{
if (conn != null && conn.State == ConnectionState.Open)
{
return conn;
}
else
{
string connStr = string.Format("Persist Security Info=True;Data Source={0},{1};Initial Catalog={2};User ID={3};Password={4};Network Library=DBMSSOCN;",
DBCfg.DBHost, DBCfg.DBPort, DBCfg.DBName, DBCfg.UserID, DBCfg.UserPw);
conn = new SqlConnection(connStr);
if (conn != null)
{
conn.Open();
}
return conn;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
logger?.Error("== SimpleDBConnection() ==");
logger?.Error(ex);
return null;
}
}
불특정 객체 반환할 수 있게 하기
// 단일 레코드 조회
public T GetItemQuery<T>(IDbConnection cnn, string Qry)
{
return SqlMapper.Query(cnn, Qry).FirstOrDefault();
}
// 다중 레코드 조회
public IEnumerable<T> GetMultipleQuery<T>(IDbConnection cnn, string Qry)
{
SqlMapper.GridReader gr = SqlMapper.QueryMultiple(cnn, Qry);
return gr.Read<T>();
}
T객체를 사용해 클래스 형태로 데이터를 받아올 수 있습니다.
전체 클래스는 너무 많아서 올리지는 않을 예정이고, 위 두개의 샘플만으로 많이 응용을 할 수 있을 거라고 생각됩니다.
그럼 이만!!
반응형
'개발 > C#' 카테고리의 다른 글
[2022.09] 이중실행 방지 (0) | 2022.09.26 |
---|---|
[2022.09] 현재 경로 가져오기 고찰 (0) | 2022.09.26 |
[2022.09] 비프 음을 Stop시킬 때까지 내게 하기 (1) | 2022.09.21 |
[2022.09] 맥 어드레스를 이용한 라이선스 기법 (0) | 2022.09.20 |
[2022.09] Webhook API를 이용한 로깅기법 (0) | 2022.09.08 |