Si no está utilizando tipos anulables, lo mejor que puede hacer es comprobar para ver si el valor de la columna es DBNull. Si es DBNull, establezca su referencia a lo que usa para null/empty para el tipo de datos correspondiente.
DataRow row = ds.Tables[0].Rows[0];
string value;
if (row["fooColumn"] == DBNull.Value)
{
value = string.Empty;
}
else
{
value = Convert.ToString(row["fooColumn"]);
}
Como dijo Manu, puede crear una clase de conversión con un método de conversión según el tipo de sobrecarga por lo que no tiene que la pimienta con su código if/else bloques.
Sin embargo, haré hincapié en que los tipos que aceptan nulo son la mejor opción si puede usarlos. El razonamiento es que con tipos que no admiten nulos, vas a tener que recurrir a "números mágicos" para representar nulo. Por ejemplo, si está asignando una columna a una variable int, ¿cómo va a representar DBNull? A menudo no puede usar 0 porque 0 tiene un significado válido en la mayoría de los programas. A menudo veo que las personas asignan DBNull a int.MinValue, pero eso también podría ser problemático. Mi mejor consejo es este:
- Para las columnas que pueden ser nulas en la base de datos, utilice tipos que aceptan valores de nulo.
- Para columnas que no pueden ser nulas en la base de datos, use tipos normales.
Se hicieron tipos anulables para resolver este problema. Dicho esto, si usted está en una versión anterior del marco o si trabaja para alguien que no asimila los tipos que aceptan nulos, el ejemplo del código hará el truco.
cerrar: [most-efficient-way-to-check-for-dbnull-and-then-assign-to-a-variable] (http://stackoverflow.com/questions/221582/most-efficient-way -to-check-for-dbnull-and-then-assign-to-a-variable) – nawfal