2013-04-02 2 views
1

Я извлекаю данные из БД, а затем проверяю, является ли оно истинным, если это так, я устанавливаю флажок. Проблема в том, что переменная может быть пуста, и она затем бросает ошибку «System.InvalidCastException: указанный сброс недействителен».Как удалить значение bool, которое может быть пустым

Любые идеи? Ниже приведен код, который хорошо работает, за исключением случаев, когда он получает пустое поле.

if ((bool)myReader["Analytics"] == true) Analytics.Checked = true; 
+0

Является ли это переменной DB? – nik0lias

ответ

4

Вы можете использовать IsDBNull метод DataReader.

if (!myReader.IsDBNull(myReader.GetOrdinal("Analytics"))) 
{ 
    //not null. do your casting now. 
} 
+0

Amazing - спасибо! Поэтому просто для подтверждения того, что он сейчас делает, является: проверка поля, чтобы убедиться, что он не пуст, а затем назначить проверку, если это необходимо. Зачем нам нужно использовать getOrdinal, а не просто получать значение поля? – Dashsa

+0

Метод ISDBNull получает значение, указывающее, содержит ли столбец несуществующие или отсутствующие значения. Таким образом, это условие 'if' проверяет, возвращает ли этот столбец значение« null »или« valid », если не« NULL », он выполняет код внутри if block. Проверьте ссылку в моем ответе для получения более подробной информации (нажмите на IsDBNull) – Shyju

+0

Поскольку ординарные поисковые запросы более эффективны, чем именованный поиск. – Shyju

0

Попробуйте так:

var column = reader.GetOrdinal("Analytics"); 
if (!myReader.IsBDNull(column)) 
{ 
    Analytics.Checked = myReader.GetBoolean(column); 
} 
1

"Пустые" значения возвращаются как DBNull.Value, так что вы можете сделать что-то вроде:

if(myReader["Analytics"]!=DBNull.Value) 
    Analytics.Checked = (bool)myReader["Analytics"]; 

Пока столбца в базе данных относится к типу bit

0
 object nullable=null; 
     var result = (bool?)nullable; 
     if(result.HasValue) 
0

Попробуйте это;

Analytics.Checked = (myReader["Analytics"] == "" || (bool)myReader["Analytics"] == false) ? false : true); 
Смежные вопросы