sqldatareader - name - use datareader in c#
¿Por qué usar el método GetOrdinal() del SqlDataReader? (4)
¿Cuál es la diferencia entre leer un valor de un SqlDataReader usando esta sintaxis:
Dim reader As SqlClient.SqlDataReader
reader("value").ToString()
O
Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
Creo que la razón para usar GetOrdinal () es para que pueda guardar el resultado y reutilizarlo varias veces para obtener un mejor rendimiento.
P.ej
Dim reader As SqlClient.SqlDataReader
int valueOrdinal = reader.GetOrdinal("value");
while ( ... )
{
var value = reader.GetString(valueOrdinal);
}
Solo quiero agregar que el contexto de la cantidad de registros que espera juega un papel importante porque si está devolviendo una sola fila, la diferencia de rendimiento entre esos dos no sería significativa. Sin embargo, si está repitiendo en varias filas, el uso del descriptor de acceso escrito es mejor para el rendimiento, ya que está optimizado. Entonces, en ese caso, si necesita obtener el mejor rendimiento utilizando un nombre de columna, llame a GetOrdinal una vez, colóquelo en una variable y luego use el descriptor de acceso con tipo con la columna ordinal en su bucle. Esto daría el mejor rendimiento.
Si tienes curiosidad acerca de la diferencia de rendimiento, echa un vistazo a mi blog
Su kilometraje puede variar, pero ...
Cuantas más filas obtenga, mayor será la mejora de rendimiento que verá. Me gusta usar alias de columna en mis sentencias SELECT, como
select
physical_column_name as "MyFieldName"
y han escrito un método, debe explicarse por sí mismo,
public Dictionary<String, Int32> GetOrdinalsByName(DbDataReader reader)
Entonces, mis tareas parecen
public void BindRow(DbDataReader dr)
{
TerminationDate = dr.GetDateTime(_columnOrdinals["TerminationDate"]);
Los diccionarios se ejecutan cerca de O (1); Por lo tanto, esta es una compensación razonable entre el rendimiento y la capacidad de mantenimiento.
GetOrdinal
realiza GetOrdinal
una búsqueda que GetOrdinal
mayúsculas y minúsculas. Si falla, se realiza una segunda búsqueda sin distinción de mayúsculas. GetOrdinal
es insensible al ancho de kana. GetOrdinal
búsquedas basadas en ordinales son más eficientes que las búsquedas con nombre, es ineficiente llamar a GetOrdinal
dentro de un bucle. Ahorre tiempo llamando a GetOrdinal
una vez y asignando los resultados a una variable entera para usar dentro del bucle.
Fuente: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx