2014-04-30 5 views
3

Visual Studio 2013에서 코드를 분석 할 때 "여러 번 개체를 처리하지 마십시오"라는 메시지가 나타납니다. 개체 연결이 개체에 여러 번 배치되었지만 목표에서 여러 번이 객체를 사용하지 않았습니다. 친절하게도이 경고를 어떻게 제거 할 수 있는지 말해 주시겠습니까? 당신이 사용하는 문코드 분석 - 개체를 여러 번 처리하지 마십시오

using (SqlConnection conn = new SqlConnection(_connString)) 

연결을 종료 할 필요를 사용하는 경우 다음 enter image description here

+0

여기서'(SqlConnection conn = new SqlConnection (_connString)) '을 사용하는 경우 – tarzanbappa

+1

SqlCommand도'Dispose' /'using'해야합니다. – StuartLC

답변

6

:

여기
private void GetData() 
     { 
      DataTable dt = new DataTable(); 
      _connString = ConfigurationManager.AppSettings["connString"]; 
      using (SqlConnection conn = new SqlConnection(_connString)) 
      { 
       conn.Open(); 
       SqlCommand cmd = new SqlCommand("select * from ref_CourseRegistration_Users", conn); 
       cmd.CommandType = CommandType.Text; 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 
       conn.Close(); 
       if (ds.Tables[0].Rows.Count > 0) 
       { 
        grdUsers.DataSource = ds; 
        grdUsers.DataBind(); 
       } 
      } 
     } 

내 분석의 스크린 샷입니다 : 여기

내 코드입니다 다시 이므로 conn.Close();은 필요하지 않습니다.

개체가 자동으로 삭제됩니다.

+0

하지만 왜 conn.Close(); 필요하지 않은가요? 그것을 연 후 연결을 닫는 것이 좋지 않다면? – Wasay

+1

@Wasay -'Close()'와'Dispose()'는'SqlConnection' 객체에서 같은 일을하고,'using' 문은 자동으로'Dispose()'를 호출합니다. ['Close'] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx) : "** 닫기 ** 및 ** Dispose **는 기능적으로 동등한 것 " –

+1

@Damien_The_Unbeliever - 가장 가까운 것을 확실하게 폐기하십시오. * 같은 것을하지 마십시오. 디 컴파일 된 소스를 살펴보십시오! Dispose는 자체적으로 Close를 호출합니다. – Jamiec

3

블록을 사용하여 연결을 열면 using 블록은 using 블록 범위를 벗어나지 않고 Dispose() 메서드를 자동으로 호출합니다.

그래서 conn.Close(); 귀하의 코드에서 필요하지 않습니다.

+0

자동으로 * close() *를 호출한다고합니까? – Jamiec

+0

@Jamiec - 아니요, 자동으로 'Dispose'를 호출합니다. 그러나'SqlConnection' 객체에서 두 메소드 모두 기능적으로 동일합니다. –

관련 문제