Select de un datareader

17/02/2008 - 05:39 por Rolando | Informe spam
Hay alguna funcion que me devuelva un string con la instruccion select a
partir de la cual se llenó un SqlDataReader ?
 

Leer las respuestas

#1 Jesús López
17/02/2008 - 10:52 | Informe spam
No existe tal función, al menos no es pública ni está documentada. Pero si
miramos la clase SqlDataReader con el .NET Reflector (
http://www.aisto.com/roeder/dotnet/ ) vemos que tiene una propiedad interna
donde mantiene el SqlCommand a partir del cual se obtuvo el DataReader. Esta
propiedad se llama Command, y así nos la muestra .NET Reflector:

internal SqlCommand Command
{
get
{
return this._command;
}
}

Así que lo que podemos hacer es usar Reflection para obtener el valor de
esta propiedad y luego sólo tenemos que acceder al CommandText del comando:


public static string GetCommandText(SqlDataReader reader)
{
Type type = typeof(SqlDataReader);
PropertyInfo pi = type.GetProperty("Command", BindingFlags.NonPublic |
BindingFlags.Instance);
SqlCommand cmd = (SqlCommand) pi.GetValue(reader, null);
return cmd.CommandText;
}


La he probado y funciona correctamente. El siguiente código muestra "SELECT
* FROM Customers" por la consola:

public static void Prueba()
{
using (SqlConnection cn = CreateConnection())
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", cn))
{
cn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
Console.WriteLine(GetCommandText(reader));
}
}
}


Saludos:

Jesús López
www.solidq.com




"Rolando" escribió en el mensaje
news:
Hay alguna funcion que me devuelva un string con la instruccion select a
partir de la cual se llenó un SqlDataReader ?



Preguntas similares