Incluso si pudieras heredar de SqlDataReader, no importaría de todos modos porque no podrías hacer que SqlCommand creara una instancia de tu clase derivada.
La implementación de IDataReader en un contenedor no es nada difícil cuando simplemente se está deferiendo al SqlDataReader subyacente. Es un poco lento, pero no tan malo.
Pero tengo curiosidad, ¿el recurso que desea eliminó la conexión? De ser así, hay un miembro CloseConnection de la enumeración CommandBehavior que asegura que la conexión se cerrará cuando se cierre el lector de datos.
var reader = command.ExecuteReader(CommandBehavior.CloseConnection);
...
reader.Close(); // also closes connection
Tenga en cuenta que Cerrar/Eliminar son lo mismo en SqlDataReader.
Finalmente, aquí hay una última sugerencia que me ha servido bien en el pasado. Tenga en cuenta que en el siguiente ejemplo, es dueño del SqlDataReader de principio a fin, aunque está "cediendo" a la persona que llama en cada registro.
private static IEnumerable<IDataRecord> GetResults(this SqlCommand command) {
using (var myTicket = new MyTicket())
using (var reader = command.ExecuteReader()) {
while (reader.Read()) {
yield return reader;
}
}
// the two resources in the using blocks above will be
// disposed when the foreach loop below exits
}
...
foreach (var record in myCommand.GetResults()) {
Console.WriteLine(record.GetString(0));
}
// when the foreach loop above completes, the compiler-generated
// iterator is disposed, allowing the using blocks inside the
// above method to clean up the reader/myTicket objects
¿Qué quiere decir no heredable? ¿Es una clase sellada? ¿Podrías elaborar sobre las interfaces? ¿NO TIENES que implementar esos? Además, ¿por qué NO quieres? –
SqlDataReader no está sellado, por lo que es hereditario, pero sus constructores son privados, por lo que no puede satisfacer al constructor base cuando hereda de él; solo estoy criticando los detalles, pero aún así, tiene razón. –
Además de mi comentario sobre la respuesta de sedoso, no puedo evitar preguntarme ... ¿qué podrías necesitar empaquetar con un 'SqlDataReader'? Realmente espero que no sea un 'SqlCommand' o' SqlConnection' ... – Aaronaught