私たちのアプリケーションは、ほぼ例外なくカスタム DataAccessLayer クラスを使用しており、その中で Data Access Application Block (現在はバージョン 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 の問題など) があります。 -関連しており、これが問題の一部であるかどうか疑問に思っています。