SqlDataReader를 만들려면, 생성자를 직접 사용하지 않고 SqlCommand 개체의 ExecuteReader 메서드를 호출해야 합니다.
SqlDataReader가 사용 중이면, 관련 SqlConnection이 SqlDataReader를 사용하고 있으며, 이를 닫지 않으면 SqlConnection에서 다른 작업을 수행할 수 없습니다. 이런 상태는 SqlDataReader의 Close 메서드가 호출될 때까지 적용됩니다. 예를 들어, Close를 호출할 때까지 출력 매개 변수를 검색할 수 없습니다.
데이터를 읽는 동안 다른 프로세스나 스레드에 의해 결과 집합이 변경되면 SqlDataReader의 사용자가 이를 볼 수 있습니다. 그러나 세부적인 동작은 타이밍에 따라 달라집니다.
IsClosed와 RecordsAffected는 SqlDataReader를 닫은 후에 호출할 수 있는 유일한 속성입니다. SqlDataReader가 존재하는 동안 RecordsAffected 속성에 액세스할 수 있지만, RecordsAffected의 값을 반환하기 전에 항상 Close를 호출하여 반환 값이 정확하도록 합니다.
다음 예제에서는 SqlConnection, SqlCommand, SqlDataReader 등을 만듭니다. 이 예제에서는 데이터를 읽고 해당 데이터를 콘솔 창에 씁니다. 그런 다음SqlDataReader를 닫습니다. SqlConnection은 using 코드 블록의 끝에서 자동으로 닫힙니다.
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 |
private static void ReadOrderData(string connectionString) { string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;"; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(queryString, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); // Call Read before accessing data. while (reader.Read()) { Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1])); } // Call Close when done reading. reader.Close(); } } |