2

나는 DB에서 일부 데이터를 fetchig에 대한 SqlDataReader 개체를 사용하고 누수가 발생할 수 있습니다. 연결에 Reader를 사용한 후에는 연결을 닫을뿐 Reader가 아닙니다. 우리는 연결의 가능성이 여기에 는 SQL 리더를 닫지 않고도록 SqlConnection 닫기 - 그것은 연결이

누출이 마십시오 내가 사용하고있는 코드입니다

Public Sub Get_SomeData(ByVal sCon As String,ByRef ObjectToReturn As SomeClass) 
     Dim sqlCon As SqlConnection = New SqlConnection(sCon) 
     Dim sqlR As SqlDataReader = Nothing 
     Dim sqlCmd As SqlCommand = New SqlCommand 
     sqlCmd.CommandType = CommandType.StoredProcedure 
     sqlCmd.Connection = sqlCon 
     sqlCmd.CommandText = "get_SomeData" 
     sqlCon.Open() 
     sqlR = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection) 
     If sqlR.HasRows And sqlR.Read Then 
      ObjectToReturn.Property1 = sqlR("Column1").ToString 
      ObjectToReturn.Property1 = sqlR("Column1").ToString 
      ObjectToReturn.Property1 = sqlR("Column1").ToString 
      ObjectToReturn.Property1 = sqlR("Column1").ToString 
     End If 
     sqlCon.Close() 
    End Sub 

답변

1

아니, 충분 연결하지만, 더 나은 방법을 닫는 것은 Using

Using sqlCon = New SqlConnection(sCon) 
     Dim sqlR As SqlDataReader = Nothing 
     Using sqlCmd = New SqlCommand 
      sqlCmd.CommandType = CommandType.StoredProcedure 
      sqlCmd.Connection = sqlCon 
      sqlCmd.CommandText = "get_SomeData" 
      sqlCon.Open() 
      Using sqlR = sqlCmd.ExecuteReader() 
       If sqlR.HasRows And sqlR.Read Then 
        ObjectToReturn.Property1 = sqlR("Column1").ToString 
        ....... 
       End If 
      End Using 
     End Using 
    End Using 
통해

MSDN 문서의 중요한 부분 사용

때때로 코드에 un 파일 핸들, COM 랩퍼 또는 SQL 연결과 같은 관리 자원. Using Block은 코드가 으로 끝나면 하나 이상의 리소스가 처리되도록 을 보장합니다. 이렇게하면 다른 코드를 사용할 수 있습니다.

관리 자원은 당신의 부분에 여분의 코딩없이 .NET 프레임 워크 쓰레기 컬렉터 (GC)에 의해 처리된다. 관리되는 리소스에 대해 Use 블록을 필요하지 않습니다. 그러나 블록 사용을 사용하면 가비지 수집기를 기다리지 않고 관리되는 리소스의 폐기를 강제로 수행 할 수 있습니다.

후반 응답
+0

감사합니다 .. 정말 죄송합니다 – santhosh