2013-08-26 53 views
0

您好我试图处理空异常,但我仍然收到异常警告:data is null此方法或属性不能被调用空值。SqlDataReader填充组合框IsDBNull问题

这是我的代码:

spojeni.Open(); 
     string sql_combobox = "SELECT column FROM tableO RDER BY nazev ASC"; 
     SqlCommand combobox = new SqlCommand(sql_combobox, spojeni); 


     try 
     { 
      SqlDataReader dr = combobox.ExecuteReader(); 
      while (dr.Read()) 
      { 
       if (!dr.IsDBNull(0)) 
       { 
        comboBox1.Items.Add(dr["column"]); 
       } 
      } 

      dr.Close(); 
      dr.Dispose(); 
      spojeni.Close(); 
     } 
+2

在检查中,您正在检查第#0列,但在“添加”调用中,您将按名称获取列。我冒昧猜测你所要求的列实际上并不是列#0。 – CodingGorilla

+1

不,'Select query'只有'1'列,这意味着'0'与'column'相同。 –

+0

哪一行给你错误?if(!dr.IsDBNull(0))或comboBox1.Items.Add(dr [“column”]); ? – Ehsan

回答

1

我从你的代码获得

spojeni.Open(); 
//change your query string there was an error in it 
string sql_combobox = "SELECT column FROM table ORDER BY nazev ASC"; 
SqlCommand combobox = new SqlCommand(sql_combobox, spojeni); 


try 
{ 
    SqlDataReader dr = combobox.ExecuteReader(); 
    while (dr.Read()) 
    { 
     if (!dr.IsDBNull(0)) 
     { 
      comboBox1.Items.Add(dr.GetString(0)); 
     } 
    } 

    dr.Close(); 
    dr.Dispose(); 
    spojeni.Close(); 
} 
+0

如果是这样,我猜这个异常就是'ExecuteReader'上的'SQLException'(语法错误)。 –

+0

@KingKing你是对的。这就是为什么我想知道发生错误的那一行。 – Ehsan

0

你需要指定要检查的列...尝试这样的事:

if (dr["column"] != DBNull.Value) 
{ 
    comboBox1.Items.Add(dr["column"]); 
} 
+0

如果你解释为什么'IsDBNull'不起作用,这将是完美的。 –

+0

对不起,但这不适合我。斯蒂尔同样的例外。 – Marek