DataReader 클래스는 간략하게 말하면 데이터베이스에 연결된 상태에서 읽기 전용(read-only), 전진 전용(forward-only)의 레코드 셋으로 불러오는 클래스이다. 그렇기 때문에 데이터를 불러오는 기능을 하는 클래스 중에 가장 성능이 좋은 것이다. 다음은 DataReader의 특징이다.

• DataReader 객체의 레코드셋은 읽기 전용이다. • DataReader 객체의 레코드셋은 전진 전용이다. 따라서 페이징을 사용하거나    처음의 레코드로 가는 등의 다양한 기능은 가지고 있지 않다. • DataReader가 열려있는 동안은 Connection 객체를 이용해서 다른 일을 할 수 없다.    이는 DataReader가 연결 지향적인 레코드셋이기 때문이다.

DataReader를 이용해서 단순하게 레코드셋을 가져올 수 있을 뿐 아니라, 여러 개의 레코드셋을 가져올 수도 있다. 또한 저장 프로시저를 사용해서 레코드셋을 가져올 수도 있다. 이번 강좌에서는 가장 많이 사용되는 Command 객체의 ExecuteReader()를 이용한 예제를 다루도록 하겠다.
다음은 DataReader를 이용해서 레코드셋을 가져오는 순서이다.

ⓐ Connection 객체를 생성한다. ⓑ Command 객체를 생성한다. ⓒ Command 객체의 CommandText 프로퍼티에 쿼리문이나 저장 프로시저를 설정한다. ⓓ Command 객체의 CommandType 프로퍼티에 실행될 쿼리문의 종류를 설정한다. ⓔ Command 객체의 Connection 프로퍼티에 Connection 객체를 설정해준다. ⓕ Connection 객체의 Open() 메서드를 호출하여 데이터베이스를 열어준다. ⓖ Command 객체의 ExecuteReader() 메서드를 호출하여 해당 쿼리문이나 저장 프로시저를 실행해서 DataReader 객체에 레코드셋을 넣는다. ⓗ DataReader의 Read() 메서드를 호출해서 각각의 레코드에 대한 처리를 한다. ⓘ 해당 처리가 끝났으면 DataReader의 Close() 메서드를 호출하여 DataReader 객체를 닫아준다. ⓙ Connection 객체의 Close() 메서드를 호출하여 데이터베이스를 닫아준다.

이번에도 역시 쿼리문을 직접 입력해서 데이터를 불러오는 방법과 sp를 이용해서 데이터를 불러오는 방법을 모두 이용해 보도록 하겠다.
다음은 데이터를 불러오는 sp이다.

Create Proc up_SelectAllAddress As Begin     Select    *     From    Address End

물론 더 복잡한 sp를 사용할 수도 있지만 간단하게 사용하기 위해서 위와 같은 sp를 작성했다.
위의 sp는 잠시 후에 다루도록 하고 먼저 직접 쿼리문을 입력해서 만들어보도록 하겠다. 새로운 프로젝트를 만들고 프로젝트의 이름을 DataReaderEx로 한다. 새 프로젝트 대화상자는 앞의 강좌에서 몇 번 보여드렸으니까 이제부터는 그림으로 보여드리지는 않겠다.
새 프로젝트가 생성이 되면 코드 편집기에 다음의 코드를 입력한다.

using System; using System; using System.Data; using System.Data.SqlClient; namespace DataReaderEx {     public class Class1     {         [STAThread]         static void Main(string[] args)         {             // Connection 객체를 생성합니다.             SqlConnection connection = new SqlConnection( "server=localhost;"                 + "database=Study;uid=sa;pwd=tndls" );             GetRecordByTSql( connection );         }// Main 메서드 끝         static void GetRecordByTSql( SqlConnection connection )         {             // Command 객체를 생성합니다.             SqlCommand command = new SqlCommand( "Select * From Address", connection );             // Command 객체의 CommandType 프로퍼티에 실행될 쿼리문의 종류를 설정합니다.             command.CommandType = CommandType.Text;             // Connection 객체의 Open() 메서드를 호출하여 데이터베이스를 열어줍니다.             connection.Open();             // Command 객체의 ExecuteReader() 메서드를 호출하여 해당 쿼리문이나             // 저장 프로시저를 실행해서 DataReader 객체에 레코드셋을 넣습니다.             SqlDataReader reader = command.ExecuteReader();             // DataReader의 Read() 메서드를 호출해서 각각의 레코드에 대한 처리를 합니다.             while ( reader.Read() )             {                 Console.WriteLine( "{0}\t{1}\t{2}", reader["ID"], reader["Name"]                     , reader["Email"] );             }             // 해당 처리가 끝났으면 DataReader의 Close() 메서드를 호출하여             // DataReader 객체를 닫아줍니다.             reader.Close();             // Connection 객체의 Close() 메서드를 호출하여 데이터베이스를 닫아줍니다.             connection.Close();         }    // GetRecordByTSql 메서드 끝     }    // 클래스 끝 }

'.net' 카테고리의 다른 글

개발자가 알아두면 좋은 ASP.NET 지식 (세션편  (0) 2007.07.21
System.IO 네임스페이스의 재발견  (4) 2007.07.18
DataReader  (1) 2007.07.17
DB _ command  (0) 2007.07.17
DB를 연결  (0) 2007.07.17
ADO.NET  (2) 2007.07.17
  1. shaved head goatee 2008.03.13 05:56

    아주 좋은 위치 나는 그것을 감사 좋아한다!

+ Recent posts