while recuperar recorrer mediante executereader dbdatareader datos data c# .net

c# - recuperar - sql data reader vb



SqlDataReader.GetString y sqlnullvalueexception (4)

Soy nuevo en C #. Estaba ejecutando algunas consultas de selección de tablas de base de datos utilizando clases System.Data.SqlClient. Obtuve la excepción sqlnullvalueexception mientras ejecutaba alguna consulta de selección. En Google, llego a saber que si el valor es nulo en la base de datos, SqlDataReader.GetString (o sus variantes) lanzará sqlnullvalueexception. ¿Cuál es la mejor práctica de codificación para esto?

if (!sqlDataReader.IsDBNull(n)) value = r.GetString(n);

¿Alguna mejor manera de codificar?


El código que has publicado está bien. También podrías hacer algo así:

value = r[n] as string;

Si el valor en la base de datos es nulo, r[n] devolverá DBNull.Value, y la conversión a la string devolverá null .


Esa es realmente la mejor manera de hacerlo si desea evitar cualquier excepción. Debe decidir si un campo nulo representa o no una situación excepcional en su código, si no lo hace, use este método. Si es así, sugeriría que permitas que se lance la excepción o que atrapes la excepción, la envuelves en una excepción más significativa y la lanzas.

Pero lo principal es saber que esta es la forma estándar de recuperar valores de un lector de datos cuando un campo nulo no representa una situación excepcional en el dominio de la aplicación.


Esto funcionó para mí:

value = reader.GetValue(n).ToString();


Si no quieres repetir esto mucho, simplemente crea una función de ayuda, como esta:

public static class DataReaderExtensions { public static string GetStringOrNull(this IDataReader reader, int ordinal) { return reader.IsDBNull(ordinal) ? null : reader.GetString(ordinal); } public static string GetStringOrNull(this IDataReader reader, string columnName) { return reader.GetStringOrNull(reader.GetOrdinal(columnName)); } }

Que puedes llamar así:

value = reader.GetStringOrNull(n);