[C#] SQLite 데이터베이스 접속과 데이터 가져와서 표현하는 방법
요즘 대형 DBMS 들도 있지만 소형 기기에 쓰이는 DB 들도 있습니다. 그 중 안드로이드 폰에 사용되면서 각광을 받고 있는 SQLite 에 대해서 알아 보겠습니다. SQLite 에 접속해서 데이터를 가져오는 과정을 설명하려고 합니다.
▼ 먼저 SQLite 홈페이지에 접속해서 연결을 위한 dll들을 다운 받아야 합니다. 링크 주소를 클릭해서 SQLite 홈페이지로 이동합니다.
http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
▼ 다운로드 페이지로 가서 자기가 개발하고 있는 시스템에 맞는 파일을 골라 다운받습니다. 저는 setup 파일을 받았습니다.
▼ 압축을 푼 파일 안에 C# 에서 사용할 수 있는 Reference dll 들이 있습니다. SQLite 참조 dll 들을 추가하기 위해 References 에 오른 마우스를 클릭한 후 [Add Reference] 클릭합니다.
▼ Reference 추가 대화상자에서 왼쪽 메뉴 Brower 을 클릭합니다. 그럼 Dll 파일을 추가할 수 있는 파일 추가 대화상자가 뜹니다. SQLite 홈페이지에서 다운받아 압축을 푼 폴더로 가서 dll 을 추가하시면 되겠죠.
▼ 아래 그림은 SQLite 참고 dll 을 추가한 후 구현한 소스로 실행한 화면입니다. 샘플 DB 에 있는 내용을 읽어 들여서 DataGrid 에 표현한 것입니다. 어떻게 데이터를 가져와서 컨트롤에 추가했는지 아래 소스를 보고 설명 드리도록 하겠습니다.
▼ 먼저 DB 에 접속해서 데이터를 가져오기 위해서는 패턴이 있습니다. 아래 4단계는 보통 DB 접속해서 데이터를 가져오는 순서 입니다.
1. Connection 연결 개체를 생성한다.
Connection 개체의 인수로 들어간 문자열은 아래와 같습니다. Data Source 에는 DB 위치를 넣고 Version=3 와 함께 연결 문자열을 구성한 후 Connection 개체 인수로 넣으시면 됩니다.
connString = "Data Source=D:\\Project\\contacts2.db;Version=3;" SQLiteConnection conn = new SQLiteConnection(connString) conn.Open(); |
2. SQL 을 실행할수 있는 Command 개체를 만든다.
Sql 쿼리(“select * from data”) 와 Connection 연결 개체를 인수로 넘긴다.
SQLiteCommand cmd = new SQLiteCommand(sql, conn); |
3. Command 개체를 이용해서 SQL 쿼리를 실행한다.
SQLiteDataReader rdr = cmd.ExecuteReader(); |
4. Command 개체로 리턴받은 DataReader 를 읽는다.
while (rdr.Read()) { // 데이터 } // DataReader 와 Connection 개체 닫기 rdr.Close(); conn.Close(); |
▼ SQLDataReader 에서 값을 읽어 오려면 배열처럼 가져오고 싶은 필드 명을 입력하시면 됩니다. 아래 소스처럼 필드명을 넣고 ToString() 함수를 호출하시면 string 값을 리턴받을수 있습니다. string raw_contact_id = rdr["raw_contact_id"].ToString();
이런 식으로 쿼리를 넣고 데이터를 호출한 후 한 행씩 읽어 들입니다. 읽어들인값은 DataGrid 컨트롤에 하나씩 집어 넣습니다. 그럼 위의 화면에서 보았던 것처럼 표현이 되는 것이죠. 아래 함수는 SQLi▼te DB 에서 데이터를 가져온 후 컨트롤에 값을 집어 넣는 것까지 구현한 전체 소스 입니다.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SQLite; using Excel = Microsoft.Office.Interop.Excel; using System.Data.OleDb; private void GetDataSelect() { string sql = "SELECT * FROM data"; string connString = "Data Source=" + textBox1.Text + ";Version=3;"; using (SQLiteConnection conn = new SQLiteConnection(connString)) { conn.Open(); SQLiteCommand cmd = new SQLiteCommand(sql, conn); SQLiteDataReader rdr = cmd.ExecuteReader(); DataTable tbPhone = new DataTable("data"); tbPhone.Columns.Add("id"); tbPhone.Columns.Add("name"); tbPhone.Columns.Add("phone"); string id = ""; int count = 0; string name = ""; string phone = ""; while (rdr.Read()) { string raw_contact_id = rdr["raw_contact_id"].ToString(); if (id.Equals(raw_contact_id)) { if (count == 1) { count++; phone = rdr["data1"].ToString(); } } else { count++; name = rdr["data1"].ToString(); } // 값을 리스트에 추가한다 if (count == 2) { tbPhone.Rows.Add(raw_contact_id, name, phone); count = 0; name = ""; phone = ""; } id = raw_contact_id; } this.dataGridView1.DataSource = tbPhone; rdr.Close(); conn.Close(); } }
'기타 언어 > C# & MFC' 카테고리의 다른 글
시샵 C# XmlDocument 클래스 사용해서 XML 파싱하는 방법 (0) | 2022.08.13 |
---|---|
시샵(C#) 프로젝트 기본 시작 Form 설정하기 (0) | 2022.07.09 |
[C#] 리스트컨트롤(ListView)에 드래그앤 드랍으로 파일 추가하기 (3) | 2020.01.21 |
[C#] 폼에서 패널컨트롤(Panel)이용해서 멀티 페이지 구현하기 (0) | 2020.01.14 |
[C#] ListView 컨트롤에서 행 선택 시 열 전체가 선택된 것처럼 보이게 하는 방법 (3) | 2020.01.02 |
프로그램 개발을 위한 무료 비주얼 스튜디오 2015 설치하기 (0) | 2019.06.19 |
시샵 C# ListView 마지막에 추가한 데이터에 스크롤 위치시키는 방법 (0) | 2019.06.10 |
시샵 C# using 네임스페이스 자동으로 추가하는 방법 (0) | 2019.05.22 |