我们的应用程序几乎完全使用自定义 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 变量并调用所需的方法。使用 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 问题),似乎正在加载-相关,我想知道这是否是问题的一部分。