2012-12-20 32 views
2

我一直在使用SQLDataReader從數據庫中獲取一些數據。一旦我使用Reader連接,我只關閉連接而不是Reader。我們是否有連接的任何可能性泄漏關閉SqlConnection而不關閉SQL讀取器 - 它可能會導致連接泄漏

這裏是我使用的代碼

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連接。當您的代碼與他們完成 時,使用塊保證 處置一個或多個此類資源。這使它們可供其他代碼使用。

受管資源由.NET Framework垃圾收集器(GC)處理,不需要任何額外編碼。您不需要 a使用管理資源塊。但是,仍然可以使用 使用塊強制處置託管資源,而不是等待垃圾回收器的 。

+0

非常感謝..對於遲到的答覆 – santhosh