while read net from data .net ado.net datareader

.net - from - using sqldatareader vb net



DataReader[i] vs DataReader.GetValue(i) vs DataReader.GetString(i) (1)

En última instancia, depende de la implementación particular de System.Data.IDataReader que se refiere, pero supongamos que se refiere a System.Data.SqlClient.SqlDataReader .

En este caso, el reader[i] y el reader.GetValue(i) hacen exactamente lo mismo. De hecho, el reader[i] internamente llama al reader.GetValue(i) . (Puede ver esto desensamblando el código usando una herramienta como ILSpy ). Ambos miembros devuelven el valor en la columna i-ésima de la fila actual y regresarán con éxito independientemente del tipo del valor (el tipo de devolución es el object ). La documentación para estos dos miembros es un poco engañosa y podría redactarse de una mejor manera. Puede usar cualquiera de estos miembros donde quiera, solo elija el que sienta que lee mejor.

Considerando que reader.GetString(i) está específicamente diseñado para devolver el valor contenido en la columna i-th de la fila actual como una string . Si el valor en esa columna no es una string , se lanzará una InvalidCastException . Utilice este método cuando esté seguro de que el valor es una string y la string es del tipo con el que desea trabajar. Esto hará que su código sea más conciso ya que no tendrá que realizar un lanzamiento.

En su caso específico, el valor en la columna i-ésima de la fila actual debe ser de tipo string , por lo que el valor de retorno de los tres miembros es idéntico.

Si se escribe correctamente, otras implementaciones de System.Data.IDataReader deben comportarse de la misma manera.

Es

dataReader[i]

lógicamente equivalente a

dataReader.GetValue(i)

¿Son lo mismo? ¿Son diferentes? ¿Hay una situación donde uno sería apropiado sobre el otro?

Hay documentados de manera diferente :

  • Obtiene la columna ubicada en el índice especificado
  • Devuelve el valor del campo especificado.

Pero cuando los uso, ambos devuelven el valor del campo. ¿Qué significa "obtener la columna"? ¿Qué significa "devolver el valor de un campo"?

Bonus Chatter :

Cuando llamo:

reader[i]; reader.GetValue(i); reader.GetString(i);

recibo una String cada vez