티스토리 뷰

코니79 IT 정보

닷넷]ADO.NET 기초강의입니다.

코니79 코니와함께 2018.02.19 13:09
ADO.NET 기초강의

자.. 오래 기다리셨죠? ^^; 이번 강좌는 ADO.NET에 대해 알아보도록 하죠. 이번강좌에서는 기초적인 ADO.NET의 사용법을 알아보도록 합시다. ADO.NET 닷넷이란 무엇일까요? 모든 데이터에 대해 쉽게 접근하고 조작할 수 있도록 .NET Framework에서 제공하는 개체들입니다. ADO.NET은 System.Data라는 네임스페이스 안에 들어있으며 이를 통칭해서 ADO.NET이라고 부릅니다. 옛날에는 ADO였던 것이 닷넷으로 바뀌면서 ADO.NET이라는 명칭을 쓰게 된거져. 데이터베이스라구 하니 좀 어렵다고 생각하는 분들도 계시져? 근데 막상 해보면 쉽습니다. 자.. 이제 ADO.NET에 대해 살펴 보겠습니다.

ADO.NET의 구성요소는 크게 DataSet와 .NET 공급자 두가지로 구분된다.

.NET 공급자(데이터베이스에 연결,조작,데이터를 가져오기 위한 개체들을 제공한다.)
.NET 공급자의 종류에는 다음과 같이 SQL SERVER용 데이터 공급자, OLE DB용 데이터 공급자, ODBC용 데이터 공급자가 있다. 
SQL SERVER용 데이터 공급자 : SQL SERVER만을 위한 공급자로 SQL SERVER에 연결할 때 사용한다.
OLE DB용 데이터 공급자 : OLE DB를 통해 데이터 원본에 접근할 때 사용한다. SQL SERVER외에 보통 OLE DB를 많이 사용한다.
ODBC용 데이터 공급자 : 위의 공급자 외에 ODBC를 통해 데이터 원본에 접근할 때 사용한다.

우리는 데이터 공급자를 통해서 DataBase에 연결하고 DataBase를 조작할 수 있고 DataBase에서 데이터를 가져올 수도 있다.
각 데이터 공급자의 구성요소에는 Connection, Command, DataReader, DataAdapter등의 4가지가 있다.

구성요소설명

Connection

데이터베이스 또는 데이터 원본에 연결하기 위해 쓰인다.

Command

데이터베이스 안의 데이터를 조회, 수정, 삭제, 삽입하기 위해 쓰인다.

DataReader

데이터베이스 안의 데이터를 조회하기 위해 쓰인다. 읽기 전용이며 또한 앞으로만 읽어나갈 수 있다. Command 보다 빠른 속도를 제공한다.

DataAdapter

데이터베이스로부터 조회해온 데이터를 DataSet에 채우거나, DataSet에 변경된 데이터를 데이터베이스에 적용시키는데 쓰인다.


DataSet(.NET 공급자에서 가져온 데이터를 저장할 수 있는 저장소이다.)
DataSet란 간단히 말해서 메모리상에 존재하는 데이터베이스라고 보면 된다. 이 DataSet에는 실제 데이터베이스처럼 여러개의 테이블이 존재할 수 있고 각 테이블마다 데이터도 담을 수 있다. 즉 기본 형태는 데이터베이스와 같다고 보면 된다. 차이점은 데이터베이스는 실제 저장공간에 존재하는 데이터베이스이고 DataSet는 메모리상에 저장되있는 데이터베이스라고 보면 된다. DataSet는 데이터베이스와의 연결이 끊어진 상태에서 메모리 상에서 작업을 하고 필요할 때 데이터베이스로 변경된 내용을 적용할 수 있다. 예를들어 우리가 DB를 수정하는 작업을 하는 프로그램을 사용한다고 하자. DataSet의 작업방식은 작업을 하기전 데이터베이스에서 데이터베이스에서 데이터를 가져와 DataSet에 넣고 데이터베이스와의 연결을 끊는다. 그리고 우리가 실제적으로 작업을 할 때는 DataSet을 조작한다. 작업이 다 끝나면 또다시 데이터베이스에 연결해서 DataSet의 변경된 내용을 데이터베이스에 적용하고 데이터베이스와의 연결을 끊는다...... 기존의 방식에서는 작업을 하는동안 계속해서 데이터베이스에 연결된 상태였지만 DataSet를 사용하면 데이터베이스와의 연결이 끊긴 상태에서도 작업이 가능하기 때문에 서버의 부하를 줄일 수 있다.


자... 기본적인 설명들은 여기까지만 하고 이제는 실제로 데이터베이스에 연결하고 데이터를 조작하는 방법을 살펴보겠다. 우선 .NET 공급자의 SQL SERVER용 데이터 공급자와  OLE DB용 데이터 공급자에 대해 살펴보겠다. ODBC용 데이터 공급자는 많이 쓰이지 않기 때문에 이번강좌에서는 다루지 않겠다.

데이터 베이스의 연결 (Connection)

데이버베이스를 조작할려면 데이터베이스에 연결이 먼저 이루어 저야 되겠져? 연결하는 방법 무지 쉽습니당...^^ 아무나 한번보면 알아염.. 걱정하시지 마시궁.. 시작합니당..^^

자.. 프로젝트 화면에서 Windows 응용프로그램을 선택하면 왼쪽에 도구상자라구 있죠? ^^; 거기 도구상자 위에 마우스를 가져다 대면 메뉴가 나옵니당.. 거기서 데이터 부분을 클릭하면 ADO.NET의 구성요소들이 나옵니당.. 그중에 데이터베이스 연결과 관련된건 다음과 같이 SqlConnection와 OleDbConnection 이 있습니당.. ODBC용 데이터 공급자는 따로 구성요소를 추가하여야 합니당..


이제 데이터 베이스에 연결해 봅시당.. SQL SERVER를 사용하신다면 SqlConnection를  SQL SERVER가 아니라면 OleDbConnection을 사용합니다. SqlConnection와 OleDbConnection의 사용방법은 비슷하기 때문에 SqlConnection의 사용방법만 설명하겠습니당..^^ 도구상자의 SqlConnection를 더블클릭해 봅시당.


그럼 다음과 같이 SqlConnection이 추가됩니다. 데이터베이스의 연결을 설정하기 위해 SqlConnection의 속성에 ConnectionString를 클릭해 봅니다. 그러면 기존에 DB 연결이 있으면 리스트에 나타나고 처음 연결하는 거라면 새연결을 클릭합니다.
그러면 다음과 같이 연결 속성을 설정할 수 있는 창이 나타납니다. 우선 공급자 탭부터 보죠..


우리는 SQL SERVER를 사용할 것이기 때문에 위와 같이 SQL SERVER을 선택하였습니다. 만약 Access 데이터 베이스에 연결한다면 Ole Db Connection으로 연결하셔서 공급자에 Jet 4.0을 선택해야겠죠? ^^
다음은 연결자 탭을 선택합니다.


1. 이건 DB가 연결되어 있는 곳의 이름이나 주소를 넣는 곳입니다. 제 컴퓨터의 데이터베이스 이름이 JUNG-SE7X95CIYC이기 때문에 이걸 선택하였습니다. 만약 DB가 자신의 컴퓨터가 아닌 다른곳에 있다면 그곳의 주소(xxx.xxx.xxx.xxx)를 입력해 주세요.
2. 여기는 로긴 정보를 입력하는 곳입니다. 데이터베이스에 연결할 때 로긴할 아이디와 페스워드를 입력해 주세요. Windows NT의 통합보안 사용과 특정 사용자 이름 및 암호 사용, 두 종류가 있는데 Windows NT의 통합보안 사용은 Windows 계정을 통해 데이터 베이스에 연결하는 것입니다. 자신이 윈도우에 로긴한 계정정보로 데이터베이스에 연결하기 때문에 Location에서만 가능하겠죠? 만약 데이터베이스가 자신의 컴퓨터가 아닌 다른곳에 있으면 특정 사용자 이름 및 암호 사용을 선택하여 로긴정보를 입력해 주세요.
3. 만약 1,2번의 정보가 다 맞다면 3번을 선택하면 데이터베이스에 리스트가 나옵니다. 자 우리는 기본적으로 제공하는 데이터베이스인 pubs 테이블을 선택합니다. 1,2번 정보가 정확하지 않다면 에러가 뜹니다. 다시한번 확인해 주세요.

자.. 마지막으로 연결 테스트를 선택해 주세요. 연결이 성공적으로 되었으면 성공 메시지가 뜹니다.~ 고급과 모두 탭은 건들일 필요가 없으니 다음에 알아보도록 하죠.. 확인을 누릅니다. 이제 데이터 베이스에 연결하는 작업은 끝났습니다. 연결이 성공적으로 되었으면 다음과 같이 SqlConnection의 속성창에 연결 속성이 추가된걸 볼 수 있습니다.


데이터베이스 조작 (Command)

이제 우리가 선택한 pubs 데이터베이스에 쿼리문을 실행시켜 봅시다. 쿼리문이란 데이터베이스를 조작하기 위한 명령어 같은 건데 (SELECT,DELETE,UPDATE,CREATE) 등이 있습니다.
다음 그림과 같이 도구상자의 데이터탭에 Sql Command를 클릭합니다. 만약 Ole Db 연결자를 통해 데이터 베이스에 연결하셨다면 OleDb Command를 선택합니다. Sql Command와 OleDb Command의 사용방법은 거의 같습니다. 단지 종류가 다른 것 뿐입니다.


SqlCommand를 추가하면 다음과 같이 화면에 SqlCommand가 추가된 것을 볼 수 있습니다.


그다음에는 SqlCommand의 속성을 정의해 봅시다. 우선 Connection 속성을 설정해 봅시다. 이 속성은 쿼리문을 실행할 때 어떤 데이터베이스에 적용시킬지 정하는 곳입니다. 여기에 우리가 앞에서 만들어본 Sql Connection을 선택해 줍니다. 그럼 SqlCommand를 통해 실행되는 쿼리문은 SqlConnection이 연결되어 있는 pubs 데이터베이스에 적용되겠죠? ^^


다음은 쿼리문을 정하는 속성인 CommandText 속성을 클릭해 봅니다. CommandText 속성을 클릭하면 다음과 같은 창이 뜹니다.


여기서 우리가 편집할 테이블을 선택한뒤에 추가해 줍니다. 우리는 employee 테이블을 추가해 볼까요?
다음은 employee 테이블을 추가한 모습입니다.


우리는 이 테이블에 있는 emp_id가 어떤 것이 있는지 조회해보자. 위 쿼리 작성기에서 emp_id를 체크한다.. 그럼 밑에 쿼리문이 바뀌는 것을 볼 수 있을 것이다. 확인을 누른다..
결과를 확인하기 위해 다음과 같이 윈폼에 버튼과 listBox를 다음과 같이 구성해보자.


위와 같이 화면을 구성하였다면 조회 버튼의 클릭이벤트에 다음과 같이 소스 코드를 추가해보자.

조회 버튼 Click 이벤트 소스

private void button1_Click(object sender, System.EventArgs e)
{
        sqlConnection1.Open();
        SqlDataReader R1 = sqlCommand1.ExecuteReader();
        while(R1.Read())
        {
                listBox1.Items.Add(R1["emp_id"].ToString());
        }
        R1.Close();
        sqlConnection1.Close();
}

위의 소스코드를 설명하자면 우선 첫 번째 줄에 sqlConnection1.Open();에서 데이터베이스에 연결한다.
두 번째 줄에서는 SqlDataReader 타입의 R1을 통해 sqlCommand1.ExecuteReader();에서 쿼리문을 실행한 결과를 받는다. 
sqlCommand 자체는 쿼리를 실행시키는 역할을 할뿐 저장하지는 못하기 때문에 결과를 저장할 저장소를 지정해 줘야 한다. 그래서 SqlDataReader를 통해 쿼리문을 실행한 결과를 받은 것이다.
세 번째 ~ 여섯 번째 줄에서는 SqlDataReader의 결과를 listBox에 아이템을 추가해주는 구문이다. R1의 레코드의 위치가 끝이 아닐 때 까지 while 문을 돌면서 listBox에 결과를 추가시킨다. R1.Read() 명령은 레코드의 위치가 끝에 도달했는지 여부를 나타내준다. 끝에 도달하지 않고 더 읽을 레코드가 있다면 true를 반환해주고 레코드의 위치가 끝에 도달하여 더 읽을 레코드가 없으면 false를 반환해준다.
레코드의 결과값을 가져올 때는 R1["필드이름"]을 적어주면 된다. 우리는 여기서 가져와야 할 필드가 emp_id이기 때문에 위와같이 적어준 것이다. 
일곱 번째와 여덟 번째줄은 사용한 SqlDataReader와 sqlConnection의 객체를 해제시켜주는 구문이다. 반드시 생성한 객체는 해제해주어서 리소스를 잡아먹는 것을 방지하기 바랍니다.
위와같이 소스코드를 추가하였다면 F5 키를 눌러 실행시켜보자.. 
다음은 실행결과이다.


자 이제 삭제 기능을 추가해보자. 삭제 버튼의 클릭이벤트에 다음과 같이 소스코드를 추가해보자.

삭제 버튼 Click 이벤트 소스

private void button2_Click(object sender, System.EventArgs e)
{
        sqlConnection1.Open();
        sqlCommand1.CommandText = "DELETE FROM sales WHERE title_id = '" + listBox1.SelectedItem.ToString() + "\'";
        sqlCommand1.ExecuteNonQuery();
        listBox1.Items.RemoveAt(listBox1.SelectedIndex);
        sqlConnection1.Close();
}

위의 소스코드를 설명하자면 첫 번째 줄은 데이터베이스에 연결하는 줄이고, 두 번째 줄은 sqlCommand1에 쿼리문을 다시 설정해 주는 곳으로 리스트박스에서 선택된 아이템의 이름을 가져와서 쿼리문의 조건문에 추가시켜 준다. 끝에 \'는 '와 같은 의미이다.
세 번째 줄은 쿼리문을 실행시키는 구문으로 반환값으로는 실행된 레코드수를 반환해준다.
네 번째줄은 리스트박스에서 선택된 아이템을 삭제해 주는 줄이다.
다섯 번째줄은 데이터베이스의 연결을 해제하는 부분이다.

위와 같이 소스코드를 추가하였으면 다시한번 F5를 눌러 실행시켜 보자. 우선 조회를 누른뒤 다음과 같이 아이템을 선택한다.


그리고 삭제버튼을 눌러보자. 그러면 다음과 같이 아이템이 삭제되었는 것을 볼 수 있을 것이다.


오늘은 여기까지 쓰고.. 강좌 계속됩니다..ㅡㅡ;;

TAG
, , , , ,
댓글
댓글쓰기 폼
광고위치
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
37,596
Today
89
Yesterday
258
링크
«   2018/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
글 보관함