[C#] sqlite on C# 예제로 배우는 C# 프로그래밍

SQLite 소개
 
SQLite는 DB 엔진을 별도로 설치하지 않고 윈도우, Mac, 리눅스, 모바일폰 등의 다양한 Platform에서 간단하게 사용할 수 있는 Lightweight 데이타베이스이다. C#에서 SQLite을 사용하기 위해서는
(1) http://system.data.sqlite.org 에서 해당 .NET 버젼에 맞는 바이너리를 다운 받아 설치하면 된다. (예를 들어, 32비트 .NET 4.0인 경우 sqlite-netFx40-setup-bundle-x86-2010-1.0.84.0.exe 을 다운 받아 설치한다)
(2) Nuget을 사용할 경우, 패키지 관리자 콘솔에서 Install-Package System.Data.SQLite 명령을 실행하여 설치한다.

SQLite을 설치한 후에 C# 프로젝트에서 System.Data.SQLite.dll를 참조한 후 using System.Data.SQLite; 네임스페이스를 참조하면, SQLite의 .NET 클래스들 (예: SQLiteConnection, SQLiteCommand, SQLiteDataReader 등)을 사용할 수 있다.

 
 
using System.Data.SQLite;
SQLiteConnection conn = new SQLiteConnection(strConn);

SQLite3 커멘트 라인 툴
 
SQLite는 위의 System.Data.SQLite를 설치하면 DB 생성, 테이블 생성, 데이타 입출력등 모든 기능을 프로그래밍으로 처리할 수 있다. 하지만, 간단한 Command line 툴을 이용하면 경우에 따라 보다 편리할 수 있는데, 많이 사용되는 툴로서 SQLite3 를 들 수 있다. 이 툴을 다운 받아 sqlite3.exe를 실행한 후, 아래와 같이 (mydb.db 라는) DB 파일을 생성하고 (파일 없으면 생성/있으면 오픈), (member 라는) 테이블을 생성할 수 있다. 데이타 입력은 일반 SQL문을 그대로 사용하는데, 아래는 INSERT 및 SELECT 문을 예로 보여주고 있다.
 

SQLite3 사용

SQLite 데이타 INSERT, UPDATE, DELETE
 
C#에서 데이타의 삽입, 삭제, 갱신등은 SQLiteCommand에 해당 SQL문을 지정하여 실행하면 된다. 일반적인 절차는 SQLiteConnection을 사용 서버를 연결한 후, SQLiteCommand에 INSERT, UPDATE, DELETE 등의 SQL문을 지정한 후 실행한다. 아래 예는 INSERT 및 DELETE를 하는 예제이다.
 

예제

using System.Data.SQLite;

class Program
{
    static void Main(string[] args)
    {
        string strConn = @"Data Source=C:\Temp\mydb.db";

        using (SQLiteConnection conn = new SQLiteConnection(strConn))
        {
            conn.Open();
            string sql = "INSERT INTO member VALUES (100, 'Tom')";
            SQLiteCommand cmd = new SQLiteCommand(sql, conn);
            cmd.ExecuteNonQuery();

            cmd.CommandText = "DELETE FROM member WHERE Id=1";
            cmd.ExecuteNonQuery();
        }
    }
}

SQLite 데이타 읽기
 
C#에서 SQLite의 데이타를 가져오기 위해서는 SQLiteCommand/SQLiteDataReader 혹은 SQLiteDataAdapter를 사용한다. SQLiteDataReader는 연결 모드로 데이타를 한 레코드씩 읽어 오는 반면, SQLiteDataAdapter는 데이타를 주로 DataSet 객체 안에 모두 넣고 사용하게 된다.
 

예제

private static void Select_Reader()
{
    string connStr = @"Data Source=C:\Temp\mydb.db";

    using (var conn = new SQLiteConnection(connStr))
    {
        conn.Open();
        string sql = "SELECT * FROM member WHERE Id>=2";

        //SQLiteDataReader를 이용하여 연결 모드로 데이타 읽기
        SQLiteCommand cmd = new SQLiteCommand(sql, conn);
        SQLiteDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            Console.WriteLine(rdr["name"]);
        }
        rdr.Close();
    }
}

private static DataSet Select_Adapter()
{
    DataSet ds = new DataSet();
    string connStr = @"Data Source=C:\Temp\mydb.db";

    //SQLiteDataAdapter 클래스를 이용 비연결 모드로 데이타 읽기
    string sql = "SELECT * FROM member";
    var adpt = new SQLiteDataAdapter(sql, connStr);
    adpt.Fill(ds);
            
    return ds;
}

SQLite 파일 암호화
 
SQLite 데이타 파일을 암호화하기 위해서는 아래 예제(A)와 같이 SQLiteConnection 객체(conn)를 생성하고 conn.Open()을 호출하기 이전에 conn.SetPassword() 를 사용하여 암호를 지정하면 된다. 이후, conn 을 Close() 하기 전에 간단한 테이블을 만들면 암화화된 SQLite 데이타 파일이 생성된다.

암호가 설정된 SQLite 데이타 파일은 아래 예제(B)와 같이 향후 연결시 연결문자열에 Password 파라미터를 지정하여 오픈하여야 한다.

암호를 변경하기 위해서는 아래 예제(C)와 같이 conn.Open()을 호출한 후 conn.ChangePassword() 메서드를 사용하여 새 암호를 지정하면 된다. 또한 암호를 삭제하기 위해서는 암호변경과 동일하나 암호에 빈 문자열을 지정하면 된다.

 

예제

// 예제(A). 처음 암호 설정
using (var conn = new SQLiteConnection("Data Source=mydb.db"))
{
    conn.SetPassword("mypw");
    conn.Open();
    string sql = "create table A(id int); insert into A values(1);";
    var cmd = new SQLiteCommand(sql, conn);
    cmd.ExecuteNonQuery();
}

// 예제(B). 다음부터 암호와 함께 오픈
using (var conn = new SQLiteConnection("Data Source=mydb.db;Password=mypw"))
{
    conn.Open();
    var cmd = new SQLiteCommand("select * from A", conn);
    var rdr = cmd.ExecuteReader();
    while(rdr.Read())
    {
        Console.WriteLine(rdr[0]);
    }
    rdr.Close();
}

// 예제(C). 암호 변경
using (var conn = new SQLiteConnection("Data Source=mydb.db;Password=mypw"))
{
    conn.Open();
    conn.ChangePassword("newpw");  // 암호 변경
}

// 예제(D). 암호 삭제
using (var conn = new SQLiteConnection("Data Source=mydb.db;Password=newpw"))
{
    conn.Open();
    conn.ChangePassword("");       // 암호 삭제
}

SQLite Parameterized Query
 
SQLite 쿼리에서 외부 입력값을 대입할 때에는 SQL Inject을 방지하기 위해서 Parameterized Query를 사용해야 한다. 아래 예제는 SQLite에서 Parameterized Query를 방법을 예시한 것이다.
 

예제

public void GetEmp(string pattern)
{
   // ... 생략 ...
   cmd.CommandText = "SELECT * FROM emp WHERE name like @name;";
   cmd.Parameters.AddWithValue("@name", $"%{pattern}%");
}

[출처] https://www.csharpstudy.com/Practical/Prac-sqlite.aspx

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
120 [WPF] Using Images in WPF TabControl Headers 탭컨트롤 헤더 이미지 file 졸리운_곰 2024.02.18 2
119 [Windows Apps][MFC] HTTP SPY : HTTP 스파이 file 졸리운_곰 2023.11.29 3
118 [Windows Apps][MFC] 2D LUA Based Robot Simulator : 2D LUA 기반 로봇 시뮬레이터 file 졸리운_곰 2023.11.29 3
117 [인공지능 VB.NET] Build Simple AI .NET Library - Part 2 - Machine Learning Introduction : 간단한 AI .NET 라이브러리 구축 - 2부 - 기계 학습 소개 file 졸리운_곰 2023.10.19 6
116 [인공지능 VB.NET] Build Simple AI .NET Library - Part 1 - Basics First : 간단한 AI .NET 라이브러리 구축 - 1부 - 기본 사항 우선 file 졸리운_곰 2023.10.19 2
115 [Windows Programming] [VisualStudio] Nuget 패키지소스 URL file 졸리운_곰 2023.09.14 2
114 [Windows Programming] A brief history of Windows UI platforms : Windows UI 플랫폼의 간략한 역사 file 졸리운_곰 2023.09.04 2
113 [C# Apps] Editor3D: A Windows.Forms Render Control with interactive 3D Editor in C# Editor3D: C#의 대화형 3D 편집기가 포함된 Windows.Forms 렌더 컨트롤 file 졸리운_곰 2023.09.03 7
112 [인공지능 (AI)] Logo Recognition System file 졸리운_곰 2023.06.04 3
111 [C# app] Pythonnet – .NET Core와 Python의 간단한 결합 : Pythonnet – A Simple Union of .NET Core and Python You’ll Love file 졸리운_곰 2023.03.11 3
110 [C# app] Gidon C# 플러그인 프레임워크에 Python 애플리케이션 포함 : Embedding Python Applications within Gidon C# Plugin Framework file 졸리운_곰 2023.03.07 43
109 [C# App] Gidon - Avalonia 기반 MVVM 플러그인 IoC 컨테이너 : Gidon - Avalonia based MVVM Plugin IoC Container file 졸리운_곰 2023.03.07 4
108 [VS2019] [C#] WinForm에 MySQL 연동하기 file 졸리운_곰 2022.12.25 7
107 [윈도우즈 앱 개발]CaptureManager SDK - Capturing, Recording and Streaming Video and Audio from Web-Cams file 졸리운_곰 2021.04.13 34
106 [ASP.NET] JavaScript 및 ASP.NET 개발자를 위한 Blazor 소개 file 졸리운_곰 2021.03.28 82
105 [c# asp.net core] - gRPC 서버, 클라이언트 샘플 튜토리얼 file 졸리운_곰 2021.02.10 174
» [C#] sqlite on C# 예제로 배우는 C# 프로그래밍 file 졸리운_곰 2021.01.30 213
103 윈도우 wcript.shell 졸리운_곰 2020.09.10 91
102 WSH(WIndows Script Hosting) 정리 졸리운_곰 2020.09.10 760
101 [VisualBasic] Windows 화면 보호기/절전 모드 방지 방법 졸리운_곰 2020.09.10 342
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED