处置自定义数据访问层引用

时间:2010-10-01 15:53:49

标签: vb.net class data-access-layer daab

我们的应用程序几乎只使用自定义DataAccessLayer类,并且在其中我们使用数据访问应用程序块(当前版本2)。我们偶尔会得到臭名昭着的“GetOrdinal”错误。我们没有使用方法外连接。我们 使用DAAB版本2.以下是我们的DAL方法的典型示例:

Public Function MyDALMethod(ByVal Param1 As Integer, ByVal Param2 As Integer) As System.Data.IDataReader

        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = "usp_MyProcedure"
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        db.AddInParameter(dbCommand, "Param1", DbType.Int32, MyParam1)
        db.AddInParameter(dbCommand, "Param2", DbType.Int32, MyParam2)

        Return db.ExecuteReader(dbCommand)

End Function

在我们的代码中,我们只是实例化一个DAL var并调用所需的方法。使用DataReader后,引用代码将关闭,处理并将读取器设置为空。但是,对DAL的引用没有做任何事情。我想知道这是否是我们问题的一部分。一个典型的方法会使用我们的DAL:

Dim DAL as New DataAccessLayer
Dim dbReader as system.data.idatareader

dbreader = DAL.MyDALMethod(parm1, parm2)

While dbreader.read
    i = dbreader.items("column1")
    j = dbreader.items("column2")
End While

dbreader.close()
dbreader.dispose()
dbreader = nothing

我的主要问题是这些DAL参考应该以某种方式处理吗?这是一个用VB.NET编写的自定义类,所以它不实现IDisposable所以我不确定是否有任何事情要做,但我们确实有错误和问题(如GetOrdinal问题)似乎是负载相关的,我想知道这是否是问题的一部分。

1 个答案:

答案 0 :(得分:1)

如果DAL至少拥有一个Disposable成员变量(实现IDisposable),那么它也应该实现IDisposable。然后,这将向DAL的客户端指示应该调用Dispose()。然后,DAL的Dispose()将调用成员变量Dispose()。

这是实施IDisposable的一般指导。

BTW - 没有必要dbreader = nothing - 它什么都没有。见Eric Lippert's post