본문 바로가기
프로그래밍/DB

[DB] Sqlite C# 연동

by 다다면체 2025. 2. 7.
728x90
반응형

Microsoft.Data.Sqlite를 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행하는 방법을 설명해 드릴게요.
SQLite는 파일 기반 데이터베이스이며, .sqlite 또는 .db 파일로 저장됩니다.


1. Microsoft.Data.Sqlite 패키지 설치

먼저, NuGet에서 Microsoft.Data.Sqlite 패키지를 설치해야 합니다.

📌 NuGet 패키지 설치 명령

또는 Visual Studio에서

  1. 도구 > NuGet 패키지 관리자 > 패키지 관리자 콘솔을 엽니다.
  2. 다음 명령 실행:
Install-Package Microsoft.Data.Sqlite

2. SQLite 데이터베이스 생성 및 연결

📌 SQLite 데이터베이스 연결 코드

using System;
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=sample.db;";

        using (var connection = new SqliteConnection(connectionString))
        {
            connection.Open();
            Console.WriteLine("SQLite 데이터베이스 연결 성공!");
        }
    }
}

✅ sample.db 파일이 없으면 자동으로 생성됩니다.


3. 테이블 생성

SQLite에 Users 테이블을 생성하는 코드입니다.

📌 테이블 생성 코드

using System;
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=sample.db;";

        using (var connection = new SqliteConnection(connectionString))
        {
            connection.Open();

            string tableCommand = @"
                CREATE TABLE IF NOT EXISTS Users (
                    Id INTEGER PRIMARY KEY AUTOINCREMENT,
                    Name TEXT NOT NULL,
                    Age INTEGER NOT NULL
                );";

            using (var command = new SqliteCommand(tableCommand, connection))
            {
                command.ExecuteNonQuery();
                Console.WriteLine("테이블 생성 완료!");
            }
        }
    }
}

✅ **IF NOT EXISTS**를 사용하여 이미 테이블이 존재하면 생성하지 않음.


반응형

4. 데이터 삽입 (Create)

SQLite에 데이터를 삽입하는 코드입니다.

📌 데이터 삽입 코드

using System;
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=sample.db;";

        using (var connection = new SqliteConnection(connectionString))
        {
            connection.Open();

            string insertCommand = "INSERT INTO Users (Name, Age) VALUES (@Name, @Age);";

            using (var command = new SqliteCommand(insertCommand, connection))
            {
                command.Parameters.AddWithValue("@Name", "홍길동");
                command.Parameters.AddWithValue("@Age", 25);
                command.ExecuteNonQuery();
                Console.WriteLine("데이터 삽입 성공!");
            }
        }
    }
}

SQL Injection 방지를 위해 @Parameter 사용


5. 데이터 조회 (Read)

SQLite에서 데이터를 조회하는 코드입니다.

📌 데이터 조회 코드

using System;
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=sample.db;";

        using (var connection = new SqliteConnection(connectionString))
        {
            connection.Open();

            string selectCommand = "SELECT * FROM Users;";

            using (var command = new SqliteCommand(selectCommand, connection))
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine($"ID: {reader["Id"]}, Name: {reader["Name"]}, Age: {reader["Age"]}");
                }
            }
        }
    }
}

모든 데이터를 가져와 출력하는 코드


6. 데이터 수정 (Update)

사용자의 나이를 변경하는 코드입니다.

📌 데이터 수정 코드

using System;
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=sample.db;";

        using (var connection = new SqliteConnection(connectionString))
        {
            connection.Open();

            string updateCommand = "UPDATE Users SET Age = @NewAge WHERE Name = @Name;";

            using (var command = new SqliteCommand(updateCommand, connection))
            {
                command.Parameters.AddWithValue("@NewAge", 30);
                command.Parameters.AddWithValue("@Name", "홍길동");
                command.ExecuteNonQuery();
                Console.WriteLine("데이터 수정 성공!");
            }
        }
    }
}

조건을 설정해서 특정 사용자의 데이터를 업데이트함


7. 데이터 삭제 (Delete)

특정 사용자의 데이터를 삭제하는 코드입니다.

📌 데이터 삭제 코드

using System;
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=sample.db;";

        using (var connection = new SqliteConnection(connectionString))
        {
            connection.Open();

            string deleteCommand = "DELETE FROM Users WHERE Name = @Name;";

            using (var command = new SqliteCommand(deleteCommand, connection))
            {
                command.Parameters.AddWithValue("@Name", "홍길동");
                command.ExecuteNonQuery();
                Console.WriteLine("데이터 삭제 성공!");
            }
        }
    }
}

조건을 설정해서 특정 데이터만 삭제 가능


8. 트랜잭션 (Transaction)

여러 개의 쿼리를 실행할 때 트랜잭션을 사용하면 데이터 정합성을 보장할 수 있습니다.

📌 트랜잭션 사용 예제

using System;
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=sample.db;";

        using (var connection = new SqliteConnection(connectionString))
        {
            connection.Open();

            using (var transaction = connection.BeginTransaction())
            {
                try
                {
                    var command1 = new SqliteCommand("INSERT INTO Users (Name, Age) VALUES ('김철수', 40);", connection, transaction);
                    command1.ExecuteNonQuery();

                    var command2 = new SqliteCommand("INSERT INTO Users (Name, Age) VALUES ('이영희', 35);", connection, transaction);
                    command2.ExecuteNonQuery();

                    transaction.Commit(); // 모든 쿼리 성공 시 커밋
                    Console.WriteLine("트랜잭션 완료!");
                }
                catch
                {
                    transaction.Rollback(); // 오류 발생 시 롤백
                    Console.WriteLine("트랜잭션 롤백!");
                }
            }
        }
    }
}

트랜잭션을 사용하면 중간에 오류가 나도 데이터가 안전하게 유지됩니다.


✅ 정리

🔹 Microsoft.Data.Sqlite로 CRUD 작업 정리

작업SQL 문예제

생성 (Create) INSERT INTO Users (Name, Age) VALUES (@Name, @Age); 📌 코드
조회 (Read) SELECT * FROM Users; 📌 코드
수정 (Update) UPDATE Users SET Age = @NewAge WHERE Name = @Name; 📌 코드
삭제 (Delete) DELETE FROM Users WHERE Name = @Name; 📌 코드

이제 Microsoft.Data.Sqlite를 사용해서 CRUD 작업을 자유롭게 수행할 수 있어요! 🚀
추가 질문이 있으면 언제든지 알려주세요. 😃

728x90
반응형