Мой сайт использует библиотеку v 5.0 предприятия. Главным образом DAAB. Некоторые функции, такие как executescalar, executedataset работают как ожидалось. Проблемы появляются, когда я начинаю использовать Читателей
У меня есть эта функция в моем, включает класс:
Public Function AssignedDepartmentDetail(ByVal Did As Integer) As SqlDataReader
Dim reader As SqlDataReader
Dim Command As SqlCommand = db.GetSqlStringCommand("select seomthing from somewhere where something = @did")
db.AddInParameter(Command, "@did", Data.DbType.Int32, Did)
reader = db.ExecuteReader(Command)
reader.Read()
Return reader
End Function
Это называют от моего aspx.vb как так:
reader = includes.AssignedDepartmentDetail(Did)
If reader.HasRows Then
TheModule = reader("templatefilename")
PageID = reader("id")
Else
TheModule = "#"
End If
Это дает следующую ошибку на дб. Строка ExecuteReader:
Не мог бросить объект типа 'Microsoft. Методы. EnterpriseLibrary. Данные. RefCountingDataReader' для ввода 'Системы. Данные. SqlClient. SqlDataReader'.
Может любой проливать любой свет на то, как я иду о получении этой работы. Я буду всегда сталкиваться с проблемами при контакте с читателями через entlib?
ExecuteReader в Enterprise Library оборачивает IDataReader в RefCountingDataReader, который, как и SqlDataReader, реализует интерфейс IDataReader.
RefCountingDataReader имеет свойство InnerReader, которое можно привести к SqlDataReader. Пример ниже приведен на C#, но вы можете легко преобразовать его в VB.NET.
SqlDataReader reader;
reader = ((RefCountingDataReader)db.ExecuteReader(command)).InnerReader as SqlDataReader;
if (reader != null)
reader.Read();
return reader;
Надеюсь, это поможет
Я был бы осторожен с этой реализацией. На сайте Enterprise Library Codeplex есть ветка, объясняющая причину этого: http://entlib.codeplex.com/Thread/View.aspx?ThreadId=212973
Крис Таварес объясняет, что просто возвращать .InnerReader нехорошо, потому что тогда отслеживание соединения с помощью Enterprise Library отключается (его ответ от 20 мая, 17:39): «Такой подход полностью испортит ваше управление подключениями. Вся причина обертки в том, чтобы мы могли выполнить дополнительный код для очистки материала во время удаления. Захват внутреннего считывателя и выброс внешнего приведет к утечке соединений! "
Так что да, это немного неудобно, мы находимся в той же ситуации.
С уважением, Майк