2014-08-31 3 views
-1

나는 항상 Google에서 내 대답을 찾으려고했지만 내 질문에 부분적으로 만 대답을 찾았습니다.CING # USING의 데이터베이스 연결 사용 여부

제 질문은 : 데이터베이스에 연결하는 동안 더 좋은 방법은 무엇입니까 : USING과 함께 사용하거나 사용하지 마십시오. 나는 C#으로 시작 (하지만 PHP에서 몇 가지 기술을 가지고)로 지금은

가, 내가 좋아 아래 USING 방법 온라인 학습 : 구글에

string conString = Properties.Settings.Default.mattDatabaseConnectionString; 

using (SqlCeConnection con = new SqlCeConnection(conString)) 
{ 
    using (SqlCeCommand query = new SqlCeCommand("SELECT * FROM customers", con)) 
    { 
     SqlCeDataReader reader = query.ExecuteReader(); 
    } 
} 

, 나는의 사용은 사용 발견 ExecuteReader을 닫는 것을 잊지 말고 SqlCeCommand을 처분하십시오. 그러나 당신은 또한 (예 MSDN에서했다) 다음과 같은없이 그것을 만들 수 있습니다 :

SqlCeConnection conn = null; 
     SqlCeCommand cmd = null; 
     SqlCeDataReader rdr = null; 
     try 
     { 
      // Open the connection and create a SQL command 
      // 
      conn = new SqlCeConnection("Data Source = AdventureWorks.sdf"); 
      conn.Open(); 

      cmd = new SqlCeCommand("SELECT * FROM DimEmployee", conn); 

      rdr = cmd.ExecuteReader(); 

      // Iterate through the results 
      // 
      while (rdr.Read()) 
      { 
       int employeeID = rdr.GetInt32(0); // or: rdr["EmployeeKey"]; 
       string lastName = rdr.GetString(5); // or: rdr["FirstName"]; 
      } 

      // Always dispose data readers and commands as soon as practicable 
      // 
      rdr.Close(); 
      cmd.Dispose(); 
     } 
     finally 
     { 
      // Close the connection when no longer needed 
      // 
      conn.Close(); 
     } 

나는 위의 두 방법을 알고 동일하지만 무슨 숙련 된 프로그래머와 이유를위한 최선의 방법입니다. 아마 적은 문자에 대한 두 번째 ??

그리고 SqlCeEonnection conn = null;이고 다른 2 개는 정말 필요합니까 ??

고마워

+0

더 읽기 쉬운 것을 사용하십시오. 내 생각에'using'은 덜 장황하고 _ _ "sqlceconnection conn = null needed"_와 같은 질문을 제기하지 않습니다. –

+0

당신은이 2 가지 방법을 동등하게 만들기 위해 닫히기 전에'conn'을 체크해야합니다. –

+0

아무도 [IDisposable] (http://msdn.microsoft.com/en-us/library/system)을 언급 한 것이 놀랍습니다. idisposable (v = vs.110) .aspx) 인터페이스,'Dispose()'메소드 또는 가비지 콜렉션이 아직 없습니다. 허락하신다면, 데이터베이스 연결에 관한 질문이 있지만 SQL Server 나 코딩 스타일에 관한 것만 큼 .Net 프로그래밍에 관한 것입니다. – DMason

답변

1

using은 연결이 끊어 졌는지 확인하는 가장 깨끗한 방법이다. 이런 방식으로 문을 중첩합니다.

using (SqlCeConnection con = new SqlCeConnection(conString)) 
using (SqlCeCommand query = new SqlCeCommand("SELECT * FROM customers", con)) 
{ 
    con.Open(); 
    using(SqlCeDataReader reader = query.ExecuteReader()) 
    { 
     //... 
    } 
} 

try-catch는 앞서 언급 한 것과 동일합니다.

물론 예외는 이 아니기 때문에에 즉시 연결을 해제하려는 것입니다. 예를 들어, using 블록 외부의 데이터 판독기를 사용해야 할 수도 있습니다.이 경우 using을 사용하면 안되며,이를 종료하면 연결이 끊어 지므로 사용하려고하면 데이터 판독기에서 예외가 발생합니다. 기본 연결이 닫혀있는 동안

+0

@TimSchmelter 감사합니다. didn''t는 그것에주의를 기울인다. –

+0

예.하지만 첫 줄에 USING에 대한 {}이 없습니다. 이 말은 결국 연결을 닫아야한다는 뜻입니까? – MindKind

+0

테스트 됨, 좋아합니다. 그것의 2 가지 방법 사이 좋은 타협. – MindKind

1

사용은 '필요'가 아니라 그것은 당신에게 몇 가지 문제를 절약 할 수 있기 때문에 좋습니다.

예. finally으로 닫는 것을 기억하면 차가워 질 것입니다. 그러나 사용하는 동안 덜 자세히 말합니다. 그것은 또한 나의 의견으로는 더 깨끗한 코드를 만든다. (연결의 범위 내에서 변수의 범위를 제한 할 때)

+0

내 생각에 코드는 USING없이 더 깨끗하게 보일 것입니다. 개인적으로 USING을 사용하고 있습니까? – MindKind

+0

개인적으로는 Using을 사용합니다. 하지만 그래, 대부분 문체를 선택하는거야. try/finally 블록을 사용하는 것을 선호한다면 그것은 여러분의 결정입니다. 조금 더 자세한 내용입니다. – Haedrian

+0

@Matt 코드의 청결 함을 어떻게 정의합니까? 더 많은 라인 = 더 깨끗한가? 'using '은 자원을 처분하는 매우 간결하고 자기 설명적인 문법이다. –