Mi sitio está utilizando enterprise library v 5.0. Principalmente el DAAB. Algunas funciones como executescalar, executedataset funcionan como se esperaba. Los problemas aparecen cuando comienzo a utilizar lectoresError de conversión en SQLDataReader
Tengo esta función en mi clase incluye:
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
Esto se llama de mi aspx.vb así:
reader = includes.AssignedDepartmentDetail(Did)
If reader.HasRows Then
TheModule = reader("templatefilename")
PageID = reader("id")
Else
TheModule = "#"
End If
Esto le da al siguiente error en la línea db.ExecuteReader:
No se ha podido convertir el objeto del tipo 'Microsoft.Practices.EnterpriseLibrary.Data.RefCountingDataReader' para escribir 'Sys tem.Data.SqlClient.SqlDataReader '.
¿Alguien puede arrojar algo de luz sobre cómo hago esto para que funcione? ¿Siempre tendré problemas al tratar con lectores a través de entlib?
Esto devolverá el IDataReader no envuelto, que se puede convertir al lector específico del proveedor si es necesario, como el SqlDataReader. Tiene razón en que este no es un RefCountingDataReader y no encontrará el error de lanzamiento del OP. Sin embargo, es importante señalar una de las principales razones para la implementación de RefCountingDataReader ... (ver el siguiente comentario) ... – mdisibio
Si hay un System.Transaction en uso (llamadas a la base de datos incluidas en TransactionScope(), por ejemplo) verá "dbConnection.Open()" como una segunda transacción, ya sea que esté o no modificando algo. Y con la segunda conexión, se comprometerá con el coordinador de transacciones distribuidas de MS para administrar la transacción. Es un caso de esquina, pero si ocurre, sería una sobrecarga tremenda solo para recuperar algunos datos (y el servicio DTC podría no ejecutarse en el servidor). – mdisibio