首页 > 解决方案 > 我们需要处理 IDbDataParameter 吗?

问题描述

我正在重构遗留代码,我遇到了很多这样的代码,我想知道我是否必须处理 IDbParameter:

Private Function GetSqlObject as Object
    Try
        Dim parmeters() As IDbDataParameter = CreateParameters(criterias)

        reqSQL = "A SQL Request"

        dataReader = DBHelper.ExecuteReader(CommandType.Text, reqSQL, parmeters)

        While dataReader.Read()
        ....
        End While

        Return ...
    Finally
        DisposeParameters(parm)


        If Not dataReader Is Nothing Then
            dataReader.Close()
            dataReader.Dispose()
        End If

    End Try
End Sub 
    
Private Sub DisposeParameters(ByVal parameters As IDbDataParameter())
    If parameters Is Nothing Then Return
    Dim dbDataParameterArray As IDbDataParameter() = parameters
    Dim index As Integer = 0

    While index < dbDataParameterArray.Length
        dbDataParameterArray(index).Dispose()
        index += 1
    End While
End Sub

我想知道我是否可以通过 using 完全删除 finally 语句:

Using dataReader = DBHelper.ExecuteReader(CommandType.Text, reqSQL, parmeters)
    While dataReader.Read()
    ....
    End While
End Using

在这种情况下,我知道这里所说的 dataReader :正确的点来关闭 vb.net 中的数据读取器

但是参数呢?我需要处理它们吗?让他们收集垃圾并完全删除 finally 和DisposeParameters函数是否安全?

读这篇文章我有点困惑:正确使用 IDisposable 接口

由于参数不是数据库连接等,我认为它是托管的?如果是这样,我不需要处理它?

标签: c#vb.netmemory-managementgarbage-collectiondispose

解决方案


推荐阅读