Наше приложение почти исключительно использует пользовательский класс 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), которые кажутся загружаемымии мне интересно, если это является частью проблемы.