상세 컨텐츠

본문 제목

C# SQLite 사용 - 테이블 생성

C#

by 경밤 2021. 2. 22. 01:20

본문

반응형

c#에서 데이터를 저장하는데에는 여러 방법이있다. WPF에서는 XML Serializer를 이용하여 데이터를 양식에 맞춰 저장할 수 있고, 그 밖의 것들에서는 Binary Serializer, MySql 를 이용하여 데이터를 저장할 수 있다. 하지만 위의 것들은 직접 Class에 관여하여 구조를 촘촘하게 짜거나, 사전 설정이 귀찮을떄가 있다.  그래서 SQLite라는(mysql과 비슷하다) 간단한 SQL을 사용한다. 이것은 파일 하나에 의존하여 작동하는데, NuGet에서 다운로드하고 바로 사용하면 된다. 매우 간단하다.

0. 다운로드

NuGet 패키지 관리에서 설치하면 사용할 수 있게 된다.

1. 파일 생성

SQLiteConnection.CreateFile("mydb.db");

파일의 확장자명은 아무렇게 해도 좋다. mydb.database, mydb.sql, mydb.db 모두 좋다.CreateFile 함수는 만약 파일이 존재한다면 건너뛰고, 존재하지 않을 경우에만 파일을 생성한다. 그러니까 혹여 강제로 삭제될까하는 두려움은 접어두자.

2. 커넥션 열기

using (var sqlConnection = new SQLiteConnection($@"Data Source={SQl파일}"))
{
	sqlConnection.Open();
}

커넥션 열기하에 command를 생성하고 실행할 수 있다. 커넥션아래 호출되는 관련 명령들은, 한개의 커넥션을 참조하여 생성하게 하는 것이 좋다.

다른 작업들을 수행하는 어떠한 내부 함수들은 직접 커넥션을 열지않게 하는게 좋다.

3. 테이블 생성

private string getTableCreationCommand(bool onlyNotExist, bool columnId, string name, KeyValuePair<string, string>[] elements)
{
    string ifnotexists = "IF NOT EXISTS", id = "'Id' INTEGER PRIMARY KEY AUTOINCREMENT";
    tring table = $"CREATE TABLE {(onlyNotExist ? ifnotexists : "")} '{name}'({id}";

    for (int i = 0; i < elements.Length; i++)
       table += $", '{elements[i].Key}' {elements[i].Value}";

    table += ");";
    return table;
}
private KeyValuePair<string, string> tableElement(string name, string typenetc)
{
    return new KeyValuePair<string, string>(name, typenetc);
}
//직접 connection을 열지 않는다.
//connection을 매개변수로 받아와서 진행한다.
private void createTablesIfNotExists(SQLiteConnection conn)
{
    using (var command = new SQLiteCommand(conn))
    {
        command.CommandText = getTableCreationCommand(true, true, "테이블 이름", new KeyValuePair<string, string>[]
                {
                        tableElement("요소","TEXT")
                });
       command.ExecuteNonQuery();
    }
}

예시코드

반응형

관련글 더보기