본문 바로가기
Programming/SQLite

SQLite 테이블에 컬럼이 있는지 체크 하기

by subutie 2021. 4. 7.
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

댓글