728x90
개발을 하다 보면 테이블에 컬럼을 추가 되는 경우가 생긴다.
물론 DB 버전을 (내부적 개발 버전) 특정 table에 저장하고
그 버전에 따라 관리 하도록 하면 좋겠지만
크게 수정이 일어 나지 않을 테이블에 대해 매번 버전에 따른
테이블 관리 코드를 추가 하는 것도 번거로울 수 있습니다.
그래서 아래와 코드를 사용하시면 됩니다.
public static class DBConnect
{
const string path = "";
static SQLiteConnection _conn = null;
public static SQLiteConnection CONN
{
get
{
if (_conn == null)
{
string strConn = string.Format(@"Data Source={0}\\mydb.db", new DirectoryInfo(Environment.CurrentDirectory).FullName);
_conn = new SQLiteConnection(strConn);
}
return _conn;
}
}
public static bool HasColumn(String tableName, String columnName)
{
DataRow[] data = null;
DoSqlConnection((conn) => {
DataTable ColsTable = CONN.GetSchema("Columns");
data = ColsTable.Select(string.Format("COLUMN_NAME=\'{1}\' AND TABLE_NAME=\'{0}\'", tableName, columnName));
});
return data.Length == 1;
}
public static void DoSqlConnection(Action<SQLiteConnection> act, bool transaction = false)
{
if (act == null) return;
if (CONN == null)
{
act(null);
return;
}
bool opened = (CONN.State == System.Data.ConnectionState.Open);
if (!opened) CONN.Open();
SQLiteTransaction tr = transaction ? CONN.BeginTransaction() : null;
try
{
act(CONN);
if (tr != null ) tr.Commit();
if (!opened && CONN.State == System.Data.ConnectionState.Open) CONN.Close();
}
catch(SQLiteException e)
{
if (tr != null) tr.Rollback();
if (!opened && CONN.State == System.Data.ConnectionState.Open) CONN.Close();
//Utility.MiniDump.TryDump(CommonClass.GetFilePath("Dump"), Utility.MiniDumpType.WithFullMemory, e.Message);
}
}
}
/// 사용 방법 코드 특정 Column이 없으면 ADD Column을 하도록 하는 코드
if(!DBConnect.HasColumn("StockCodeNName", "MarketType"))
{
DBConnect.DoSqlConnection((conn) => {
string query = "ALTER TABLE StockCodeNName ADD COLUMN MarketType INT DEFAULT 0";
SQLiteCommand cmd = new SQLiteCommand(query, conn);
cmd.ExecuteNonQuery();
}, true);
}
'Programming > SQLite' 카테고리의 다른 글
SQLite 속도 개선 (0) | 2021.03.30 |
---|
댓글