2011-09-12 2 views
7

SqlDataAdapterFill() 함수 다음에 SqlConnection을 닫거나 직접 닫아야합니까?Fill() 함수 다음에 SqlDataAdapter가 SqlConnection을 닫습니까?

현재 사용에서
string cnStr = @"Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm"; 
cn = new SqlConnection(cnStr); 
SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn); 
SqlDataAdapter adapter = new SqlDataAdapter(cmd); 

DataSet ds = new DataSet(); 
adapter.Fill(ds); 

cn.Close() // ???????? 

Console.WriteLine(ds.Tables[0].Rows.Count); 
Console.WriteLine(cn.State); 

답변

14

, 당신을 위해 닫습니다 :

을 IDbConnection을 이 닫혀있는 경우 채우기를 호출하기 전에, 데이터를 검색하기 위해 열리고 는 마감했다. Fill이 호출되기 전에 연결이 열려 있으면 이 열린 상태로 유지됩니다.

using (SqlConnection conn = new SqlConnection("")) 
{ 
    conn.Open(); 

    // Do Stuff. 

} // Closes here on dispose. 

이 더 자주 읽을 수 및 내부 동작을 이해하는 사람에 의존하지 않습니다

http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx

나는 명시 적으로 using 문으로 자신을 수용하는 것이 항상 좋은 생각 SqlDataAdapter.Fill 인 경우에만 using 문과 연결. 당신이을 알고 경우

그러나, (, 당신은 단지 연결을 만든 같이) 어댑터를 사용하기 전에 연결이 닫히고가 다른 용도로 사용하지 않는 것, 당신의 코드는 완벽하게 안전하고 유효합니다. 난 당신이 할 수있는

가장 좋은 방법을 소유하여 연결을 종료 할 필요가 알다시피

using(SqlConnection con = new SqlConnection()) 
{ 
    // you code 
} 

string cnStr = "Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm"; 
    DataSet ds = new DataSet(); 

    using (SqlConnection cn = new SqlConnection(cnStr)) 
    using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn)) 
    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 
    { 
     conn.Open(); 
     adapter.Fill(ds);  
    } 
+0

을하지만 실제로 기능 – Wachburn

+1

@Wachburn의 종료 전에 닫았 어떤 상태 CN 건설을 사용하지 않고이 코드를 작성하고, 경우 MSDN을 컨설팅하는 것은이 확인 :

는 세부 사항에 이상이 게시물을 읽어보십시오. 미안, 나는 처음으로 이것을 잡지 않았다. –

+0

명령이 성공적으로 실행되면 종료 처리하지만 예외적 인 경우는 어떻게 처리합니까? (deadlock, timeout, etc.) –

4

된다

개인적으로, 나는 다음처럼 작성할 것 자동으로 연결을 닫습니다

C#의 블록을 사용하면 처리하는 동안 매우 편리합니다. 일회용 물체. 일회용 개체는 호출 할 때 사용하는 리소스를 명시 적으로 해제 할 수있는 개체입니다. 우리가 알고 있듯이 .NET 가비지 수집은 비 결정적이므로 개체가 언제 가비지 수집 될지 예측할 수 없습니다. understanding ‘using’ block in C#

관련 문제