Home » Programacion » .Net C# » C#: Diferencia entre (string), Operator as y ToString al leer de un IDataReader

C#: Diferencia entre (string), Operator as y ToString al leer de un IDataReader

junio 29th, 2011 Posted in .Net C#, Ayuda Técnica, Base de Datos, Programacion
C#: Diferencia entre (string), Operator as y ToString al leer de un IDataReader

Diferencias en la conversión de datos a String cuando trabajamos con bases de datos. Existen diferentes opciones como la conversión explícita o Cast o llamar al método ToString. El objetivo del artículos es entender las diferencias, así entenderemos porque ocurren algunos errores, y porque una opción es más rápida que la otra.

Cast (String) and Operator As

(string)Reader[0] o el Operador as es un “cast”, una conversión explícita “…if a conversion cannot be made without a risk of losing information,…”. En base de datos se aplica cuando se sabe que el campo es de tipo String o puede ser convertido a String sin peligro.

expression as type
//is equivalent to:
expression is type ? (type)expression : (type)null

Reader ToString

Reader[0].ToString(), es cuando queremos convertir cualquier tipo de campo a String. El problema es que si el valor de Reader[0] == Null, el ToString() lanzará una Expceción.

Velocidad de las conversiones a String

Un “Cast” teóricamente es más rápido, porque realiza una asignación del objeto, en cambio el método “ToString()” realiza una copia del Objeto creando uno nuevo de tipo String.

Verificar Datos Null

¿Porque utilizar DBNull.Value o reader.IsDBNull(column position)?. Podemos obtener la posición de la columna a través del método reader.GetOrdinal(column name). De esta forma nos aseguramos si el valor del campo es “null” o no

if (!reader[0] != DBNull.Value))
{
	string foo = reader[0].ToString();
}

¿Porque NO utilizar método “String.IsNullOrEmpty” en las conversiones de base de datos? El código siguiente puede arrastrar problemas, errores y excepciones.

if (!String.IsNullOrEmpty(reader[0].ToString()))
{
	string foo = reader[0].ToString();
}

Recordemos que si “reader[0]” vale “null” el método ToString() lanzará una excepción. Por eso tenemos que tener cuidado al utilizarlo.

Conclusión

En stackoverflow encontramos la recomendación:

//Those both introduce you to potential data exceptions, the optimal way to read from a reader is:
var x = reader[0] as string
//Then for numbers / bools etc I always use nullable types so you can get
var y = reader[1] as int?
//Now if you absolutely are as opposed to nullables for some reason (I think they're great for knowing whether something is or not set)
int i = (reader[1] as int?).GetValueOrDefault()

A esta recomendación, conociendo la diferencia entre un Cast y el método ToString(). Utilizaremos Cast en la mayoría de los casos, sobretodo utilizando el operator as, y cuando necesitemos convertirlo a String utilizaremos el método ToString() siempre con una comprobación previa del campo diferente de Null.

Referencias

Comments are closed