DataReader는 SELECT 명령을 한 후 리턴 받은 데이터를 한번에 하나의 레코드(Record, Row, Touple)을 읽을 수 있다. 이 클래스는 읽기 전용(Read-only), 전진 전용(Forward-only) 스트림이여서 Firehost 커서라고 부르기도 한다. 때문에 단순히 데이터를 읽을 때 사용하기 좋다. 대부분 DataSet을 사용하게 된다.

- Read() : 한 행(Row, Record, Touple)을 읽는 메소드이다. 한 행을 읽은 뒤 다음 행으로 커서를 이동한다. 위 그림을 참조하자. 이 메소드는 Boolean 값을 리턴하는데 리턴값이 true이면 다음 행이 있다는 뜻이고, false면 더 이상 읽을 행이 없다는 것을 의미한다.
- GetValue() : 현재 행에서 각 열(Column, Field)를 읽는 메소드이다. GetValue(0), GetValue["LastName"] 과 같은 방법으로 읽을 수 있으며, 인덱스가 존재 하지 않는 경우에 IndexOutOfRangeException 예외가 발생한다. 리턴되는 데이터의 형식은 본래 데이터 소스에 근접한 형식으로 리턴된다. 다시 말하면 맘대로 리턴된다는 것이다.
- GetValues() : 현재 행을 배열로 저장할 수 있는 메소드이다. 컬럼의 수는 인자로 넘기는 배열의 크기에 따라서 결정된다.
- GetInt32(), GetChar(), GetDateTime(), 등 : 메소드 이름에서 알 수 있듯이 특정한 형(Type)으로 현재 행의 컬럼 값을 가져온다. Null을 지원하지 않으므로 이 메소드를 호출 하기 전에 Null 체크를 해야한다. 또, 잘못된 형식의 테이터를 호출하여 가져오면 어김없이 InvalidCastException 예외가 발생된다.
- NextResult() : DataReader에 하나 이상의 RowSet을 가져오는 경우에 이 메소드를 호출하면 다음 RowSet으로 이동한다.
- Close() : 말 그대로 닫는 메소드이다. Command에서 저장 프로시저(Stored Procedure)를 호출하면 리턴값이 있을 수 있는데, 이 메소드를 호출해야 이 값을 받아 올 수 있다.

