SqlDataReader에 대해서 MSDN에는 다음과 같이 정의 되어 있습니다.


한마디로,
DataReader,
SqlDataReader 는 SqlCommand 객체에 의해 실행된 Sql문
의 결과(ExecuteReader() 로 실행된)의 데이터를 읽을 수 있다는 뜻 같습니다.

이러한 SqlDataReader 객체를 생성하기 위해서는
생성자를 이용하지 않고 다음과 같이 SqlCommand 객체의 ExecuteReader 메서드를 호출해야 합니다.

SqlDataReader SqlReader = SqlComm.ExecuteReader();

SqlDataReader는 다음과 같은 특징 들이 있습니다.

- 순방향 전용
- 읽기 전용 데이터 스트림
- 데이터를 읽기 위한 효율적인 방법
또한 DataReader는 데이터를 읽기만 할 수 있을 뿐
수정이나 삭제 추가와 같은 변경은 전혀 할 수 없습니다.
DataReader는 오직 데이터를 읽는 목적으로만 사용되었기 때문에 메모리의 부담이 적고 속도가 엄청 빠릅니다.

이렇게 생성된 SqlDataReader 는 다음과 같이 Read()라는 메소드를 통해서
읽혀지고 Read() 메소드는 자동으로 다음 행으로 포인터를 이동 시킨다고 할 수 있습니다.

while(SqlReader.Read())
{
Console.WriteLine("{0} {1}", SqlReader[0], SqlReader[1]);
}

한가지 주의 할 점은,
SqlDAtaReader가 사용 중이면, 관련 SqlConnection이 SqlDataReader를 사용하고 있으며,
이를 닫지 않으면 SqlConnection에서 다른 작업을 수행할 수 없습니다.

이 말의 뜻은 하나의 DataReader를 사용하고 다시 사용할 경우
이전에 사용한 DataReader를 닫고 사용해야 된다는 의미 입니다.

다음 예제는 SqlConnection, SqlCommand, SqlDataReader를 사용합니다.
마지막에 SqlDataReader를 닫고, Using 문에 의해서 SqlConnection이 자동으로 닫힙니다.

string connString
= ConfigurationManager.ConnectionStrings["TestConn"].ConnectionString;

using (SqlConnection SqlConn = new SqlConnection(connString))
{
           SqlCommand SqlComm
= new SqlCommand("Select * from notice", SqlConn);
           SqlConn.Open();
           SqlDataReader SqlReader
= SqlComm.ExecuteReader();
           while (SqlReader.Read())
           {
                    Console.WriteLine
("{0} {1} {2}", SqlReader[1], SqlReader[2], SqlReader[3]);
            }
            SqlReader.Close();
}


위의 소스에서 connString 은
해당 프로젝트의 App.Config 파일에 다음과 같이 추가 했습니다.

<configuration>
  <connectionStrings>
    <add name="TestConn" connectionString="데이터베이스 연결 정보 문자열"/>
  </connectionStrings>
</configuration>

Hoons 닷넷 Ado.Net 강좌를 참조 했습니다.
http://www.hoons.kr/Lecture/LectureView.aspx?BoardIdx=102&kind=23
Posted by JMSOFT

댓글을 달아 주세요

티스토리 툴바