[C#] Visual Studio 에서 SQLite 사용하기

소개

C# 프로그램에서 LocalDB 를 사용하는 좋은 방법중 한가지는 SQLite 를 사용하는것입니다.
또한 C# 큰 장점 Linq 를 충분히 활용할 수 있는 EntityFramework 를 사용 할 수 있게 끔 하는것이 이번 포스팅의 목표입니다.

Visual Studio 프로젝트에서 MSSQL 을 연결하는것은 너무 쉽습니다.
ADO.NET 엔티티데이터모델을 선택해서 데이터 베이스를 선택만 해주면 아주쉽게 모델을 구성할 수 있습니다.

SQLite도 예전 Visual Studio 2015, 2017 시절에는 비슷하게 흉내를 내는 시도를 많이 했습니다.
SQLite 사이트에서 제공하는 프로그램을 Visual Studio 에 설치하면 MSSql 접근하는 방식과 거의 비슷하게 동작이 가능했습니다.
그런데 Visual Studio 가 버전업그레이드가 되면서 맞춰 가는 속도가 점점 더뎌지더군요.
그래서 다른방식으로 SQlite DB 를 사용하는게 낫다 싶어 조사하고 포스팅합니다.

다음처럼 따라 하시면 간단히 C# 프로그램에서 SQLite DB를 연결하고 사용할 수 있습니다.

DB 생성

먼저 DB 를 만들어 줄것입니다.
DB 만들어 주는 툴을 소개를 드립니다.

SQLiteBrowser 라는 툴입니다.
다음위치에서 프로그램을 다운로드 받습니다.

Downloads – DB Browser for SQLite (sqlitebrowser.org)

실행을 시키고 간단히 이번 포스팅에서 사용할 테스트 DB를 만들어 주겠습니다.

[C#] Visual Studio 에서 SQLite 사용하기

위와 같이 Table이라는 Table에 Index , Name 두 필드를 생성하고 파일이름을 TestDB.db 로 명명 했습니다.

프로젝트 생성

비쥬얼 스튜디오를 실행하고 테스트로 C# 콘솔앱을 하나 만들겠습니다. 저는 .Net 7.0 으로 만들겠습니다.
프로젝트 명을 SQLiteConsole 로 정해주고 프로젝트 생성을 한후에 위에서 만들어준 DB를 끌어다 솔루션 탐색기에 붙여 넣습니다.
그리고 속성을 다음처럼 변경합니다.

[C#] Visual Studio 에서 SQLite 사용하기

Nuget packages 다운로드

Nuget 패키지관리 메뉴를 열고 다음패키지들을 설치 합니다.

  • Microsoft.EntityFrameworkCore.Tools
  • Microsoft.EntityFrameworkCore.Sqlite

또는 패키지 관리자 콘솔로 설치 할 수 있습니다.

  • PM>  Install-Package Microsoft.EntityFrameworkCore.Tools
  • PM> install-Package Microsoft.EntityFrameworkCore.Sqlite

.Net 7.0 기준으로 만들어졌으므로 패키지들도 7.~ 대의 패키지를 설치 하였습니다.

[C#] Visual Studio 에서 SQLite 사용하기

모델생성

패키지 관리자 콘솔을 열어줍니다.
다음과 같이 타이핑 합니다.


Scaffold-DbContext “Data Source=TestDB.db” Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models

[C#] Visual Studio 에서 SQLite 사용하기

그러면 위와 같이 Models라는 폴더에 모델이 생성된것이 보입니다.
이때 TestDB.db 와 Models 는 제가 작성한 샘플이며 실제는 개발 환경에 맞게 변경해주시면 됩니다.

생성된 모델을 한번 볼께요..

TestDbContext.cs

using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

namespace SQLiteConsole.Models;

public partial class TestDbContext : DbContext
{
    public TestDbContext()
    {
    }

    public TestDbContext(DbContextOptions<TestDbContext> options)
        : base(options)
    {
    }

    public virtual DbSet<Table> Tables { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder.UseSqlite("Data Source=TestDB.db");

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Table>(entity =>
        {
            entity.HasKey(e => e.Index);

            entity.ToTable("TABLE");

            entity.Property(e => e.Index).ValueGeneratedNever();
        });

        OnModelCreatingPartial(modelBuilder);
    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

Table.cs

using System;
using System.Collections.Generic;

namespace SQLiteConsole.Models;

public partial class Table
{
    public long Index { get; set; }

    public string? Name { get; set; }
}

CRUD

Program.cs 에서 다음처럼 코딩후 실행 시켜 보겠습니다.

데이터를 하나 써주고 모든 Row를 화면에 뿌려주는 간단한 예제 입니다.

using SQLiteConsole.Models;

try
{
    Table item = new Table()
    {
        Index = 2,
        Name = "test",
    };

    // Insert
    using (var db = new TestDbContext())
    {
        db.Tables.Add(item);
        db.SaveChanges();
    }

    // Read & Print
    using (var db = new TestDbContext())
    {
        foreach(var row in db.Tables)
        {
            Console.WriteLine($"Index : {row.Index} - Name : {row.Name}");
        }
    }
        
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
    if (e.InnerException != null) Console.WriteLine(e.InnerException.Message);
}

실행 시키면 다음과 같이 실행 됩니다.

[C#] Visual Studio 에서 SQLite 사용하기

원래 있던 1번 데이터뒤에 2번 Test 문구가 추가된것이 보이지요?

결론

위와 같이 표시되며 Visual Studio에서 SQLite DB를 아주 쉽게 컨트롤 하는 방법을 배웠습니다.

DB 연결은 마무리 되었으니 EntityFrameWork 을 사용하여 WPF 같은 UI 프로그램도 구성할 수 있습니다.

Leave a Comment