[C#] SQLite 데이터베이스 접속과 데이터 가져와서 표현하는 방법

C# & MFC

[C#] SQLite 데이터베이스 접속과 데이터 가져와서 표현하는 방법  

 

요즘 대형 DBMS 들도 있지만 소형 기기에 쓰이는 DB 들도 있습니다. 그 중 안드로이드 폰에 사용되면서 각광을 받고 있는 SQLite 에 대해서 알아 보겠습니다. SQLite 에 접속해서 데이터를 가져오는 과정을 설명하려고 합니다.

 

먼저 SQLite 홈페이지에 접속해서 연결을 위한 dll들을 다운 받아야 합니다. 링크 주소를 클릭해서 SQLite 홈페이지로 이동합니다.

http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

 

[C#] SQLite 데이터베이스 접속과 데이터 가져와서 표현하는 방법

 

다운로드 페이지로 가서 자기가 개발하고 있는 시스템에 맞는 파일을 골라 다운받습니다. 저는 setup 파일을 받았습니다.

[C#] SQLite 데이터베이스 접속과 데이터 가져와서 표현하는 방법

 

압축을 푼 파일 안에 C# 에서 사용할 수 있는 Reference dll 들이 있습니다. SQLite 참조 dll 들을 추가하기 위해 References 에 오른 마우스를 클릭한 후 [Add Reference] 클릭합니다.

[C#] SQLite 데이터베이스 접속과 데이터 가져와서 표현하는 방법

 

Reference 추가 대화상자에서 왼쪽 메뉴 Brower 을 클릭합니다. 그럼 Dll 파일을 추가할 수 있는 파일 추가 대화상자가 뜹니다. SQLite 홈페이지에서 다운받아 압축을 푼 폴더로 가서 dll 을 추가하시면 되겠죠.

[C#] SQLite 데이터베이스 접속과 데이터 가져와서 표현하는 방법

 

아래 그림은 SQLite 참고 dll 을 추가한 후 구현한 소스로 실행한 화면입니다. 샘플 DB 에 있는 내용을 읽어 들여서 DataGrid 에 표현한 것입니다. 어떻게 데이터를 가져와서 컨트롤에 추가했는지 아래 소스를 보고 설명 드리도록 하겠습니다.

[C#] SQLite 데이터베이스 접속과 데이터 가져와서 표현하는 방법

 

먼저 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 컨트롤에 하나씩 집어 넣습니다. 그럼 위의 화면에서 보았던 것처럼 표현이 되는 것이죠. 아래 함수는 SQLite 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();
    }
}
저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군