RDB 데이터베이스는 모두 DbClient 클래스를 사용하여 쿼리문을 실행할 수 있습니다. 데이터베이스 종류별로 클라이언트를 직접 참조할 필요가 없고 사용 방법이 일관적이기 때문에 개발 편의성과 생산성을 높일 수 있습니다. 쿼리 결과를 DataList<T> 컬렉션으로 받아올 수 있으므로 데이터 처리에도 용이합니다.
DbClient는 ORM(Object-Relational Mapping, 개체-관계 매핑)을 지원하고 다음과 같은 특징이 있습니다.
DbClient의 기본 사용방법은 다음과 같습니다.
var dbClient = new DbClient(DbProviderType.SQLite, "Data Source = test.db;" + " Version = 3; DateTimeFormat = CurrentCulture; Synchronous = Off"); dbClient.CommandText = "SELECT* FROM TableName"; var dataList = dbClient.Execute<dynamic>();
위 쿼리의 결과로 DataList<dynamic> 컬렉션이 리턴 되고 멤버(Member) 구성이 자동으로 생성됩니다. dynamic 대신에 특정 T 타입을 지정할 수 있으며 T 타입을 지정할 경우 데이터베이스 테이블의 컬럼과 타입 멤버의 이름이 일치하는 정보에 대해서만 데이터를 채워줍니다. 단, 이름이 일치하는 정보 중 컬럼의 형식과 타입의 멤버 형식이 동일해야 합니다. 다르면, 예외가 발생합니다.
데이터베이스에 연결하려면 연결 문자열이 필요하며 연결 문자열을 Config 파일로 관리하거나 코드로 정의하는 방법이 있습니다.
Config 파일은 Config.DbConnectionSettingsFileName 에 json 파일 이름을 정의하고 있으며, 이 json 파일을 편집하여 연결 정보를 관리할 수 있습니다. 그리고, Config 파일이 존재하는 기본 디렉토리 경로는 Config.ConfigDirectoryPath 에서 정의합니다. 기본 디렉토리 경로는 실행 파일이 존재하는 하위 “Config” 디렉토리입니다. json 파일 구조는 아래와 같습니다.
{ "Dev": [{ "Key": "SQLite", "Value": { "ConnectionString": "Data Source = test.db;Version = 3;DateTimeFormat = CurrentCulture;Synchronous = Off ", "ProviderType": 0 } }, { "Key": "Oracle", "Value": { "ConnectionString": "Data Source=192.168.1.33:1521/testdb;UserId = C # #povice;Password = povice ", "ProviderType": 1 } } ], "Real": [{ "Key": "SQLite", "Value": { "ConnectionString": "Data Source = test.db;Version = 3;DateTimeFormat = CurrentCulture;Synchronous = Off ", "ProviderType": 0 } }, { "Key": "Oracle", "Value": { "ConnectionString": "Data Source=192.168.1.33:1521/testdb;UserId = C # #povice;Password = povice ", "ProviderType": 1 } } ] }
파일을 사용하지않고 아래와 같이 단순히 Config.DbConnectionSettings에 접근하여 연결정보를 수동으로 추가할 수 있습니다. 추가할 때 개발(Dev)과 운영(Real)을 고려하여 추가합니다. 기본적으로 Dev 모드에서는 Dev 접근을 사용하고 Release 모드에서는 Real 접근을 사용합니다. Dev 모드 여부는 Config.DevMode에서 설정합니다.
// 개발 Config.DbConnectionSettings.Dev.Add("SQLite", new DbConnectionInfo { ConnectionString = "Data Source = test.db; Version = 3;" + " DateTimeFormat = CurrentCulture; Synchronous = Off", ProviderType = DbProviderType.SQLite }); // 운영 Config.DbConnectionSettings.Real.Add("SQLite", new DbConnectionInfo { ConnectionString = "Data Source = test.db; Version = 3;" + " DateTimeFormat = CurrentCulture; Synchronous = Off", ProviderType = DbProviderType.SQLite });