net name executereader example ejemplos data column sqldatareader

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