2009-04-01 5 views
11

У меня есть DataTable resultSet; - Я пытаюсь проверить поля для null, но вернуть объект '{}' (пустой набор?). Поиски с участием «{}» не приносят никаких подходящих решений.C# DataTable ItemArray возвращает '{}' - как я могу проверить значение null?

Это код, который не работает, как ожидалось, когда поле «fk_id» равна нулю:

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

Примечание: с помощью INT индекс вместо Columns.IndexOf() не проблема.

Также имеет ли "{}" другое имя в C#?

ответ

18

Чтобы проверить столбец DBNull в наборе данных, вы можете использовать IsNull метод:

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

Ваше сравнение с null вероятно неудачей, потому что DataSets не использует null для представления «баз данных» NULL значения - они используют DBNull.Value. Если вам нужен код, чтобы работать так, как вы представили его, попробуйте следующее:

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

Большое спасибо, полностью забыл о «DBNull.Value» - прошло некоторое время с тех пор, как я манипулировал наборами данных –

+0

Интересно, почему они спроектировали его таким образом, вместо того, чтобы просто использовать нуль? –

+2

@ k.rob Потому что в .NET 1.0 не было Nullable , поэтому не было никакого способа представить значение Int32 «null». –

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

Пожалуйста, используйте:

dataTable.Select("FieldName is NULL") 

это даст вам DataRows с нулевыми значениями в столбце FieldName ,

Смежные вопросы