2009-04-01 24 views
11

Tengo un DataTable resultSet; - Estoy tratando de comprobar campos para nula, pero conseguir una '{}' (vacío establecido?) Objeto de nuevo. Las búsquedas que implican "{}" no ofrecen ninguna solución adecuada.C# DataTable ItemArray devuelve '{}': ¿cómo puedo probar el valor nulo?

Este es el código que no está funcionando como se esperaba cuando el campo "fk_id" es nulo:

if (resultSet.Rows[0].ItemArray[resultSet.Columns.IndexOf("fk_id")] == null) 
{ 
    //never reaches here 
} 

Nota: el uso de un índice int en lugar de la Columns.IndexOf() no es el problema.

lo hace también el "{}" tiene algún otro nombre en C#?

Respuesta

18

Para comprobar una columna para DBNull en un conjunto de datos, se puede utilizar el método IsNull:

if (resultSet.Rows[0].IsNull("fk_id")) 

su comparación frente null está fallando, probablemente debido a conjuntos de datos no utilizan null para representar un valor "NULL base de datos" - usan DBNull.Value. Si necesita que su código para que funcione de la manera que se ha presentado, intente esto:

if (resultSet.Rows[0].ItemArray[resultSet.Columns.IndexOf("fk_id")] == DBNull.Value) 
+0

Grande gracias, olvidó por completo "DBNull.Value" - que ha pasado un tiempo desde que he manipulado conjuntos de datos –

+0

Me pregunto por qué diseñados de esta manera en lugar de usar nula? –

+2

@ k.rob Porque no había Nullable en .NET 1.0, por lo que no había forma de representar un valor Int32 de "nulo". –

-2
try 
{ 
    if (DT.Rows[0][0] != null) 
    {  
     //your code 
    }  
}  
catch  
{  
    MessageBox.Show("AUTHANICATION FAILED.");  
} 
-2

por favor use:

dataTable.Select("FieldName is NULL") 

esto le dará los DataRows con valores nulos en la columna NombreCampo .

Cuestiones relacionadas