ExecuteScalar:未设置对象引用等

时间:2014-02-17 07:21:59

标签: c# visual-studio-2012 windows-forms-designer

伙计我需要一些帮助。这是我第一次开发一个包含DB的应用程序,考虑到这一点,请原谅我的错误。

我试图从数据库中获取一个布尔值,并在其上应用if,else循环...但它在ExecuteScalar函数上不断抛出“Object reference not set”错误。

以下是代码: -

        string sql = " // here is my sql query ";
        string connectionstring = " // Here is my connection string.... ";
        SqlConnection connection = new SqlConnection(connectionstring);
        SqlCommand command = new SqlCommand(sql,connection); 
        command.Connection = connection;
        connection.Open();
        bool ev = (bool)command.ExecuteScalar();
        if (ev == true)
        {
            MessageBox.Show("some error");
        }
        else
        {
            // Some Code
         }

我做错了什么?

非常感谢帮助。

问候。

3 个答案:

答案 0 :(得分:2)

可能查询返回null。试试这个:

bool? ev = (bool?)command.ExecuteScalar();

if(ev.GetValueOrDefault(false))
{
   MessageBox.Show(...);
}

?表示可以为空,因此通过这种方式,查询返回的值可以是null

答案 1 :(得分:0)

ExecuteScalar返回值进行一些验证,如下所示

using(SqlConnection connection = new SqlConnection(connectionstring))
using(SqlCommand command = new SqlCommand(sql,connection)) 
{
    connection.Open();
    object ev = command.ExecuteScalar();
    bool flag; 
    if(ev!=null)
    {
       // return as null value, do Task 1 
    }else if(Boolean.TryParse(ev.ToString(), out flag) && flag)
    {
       // return as true value, do Task 2   
    }
    }else
    {
       // return as false value, do Task 3   
    }
}

答案 2 :(得分:0)

帕特里克的评论很明显。这是一个完整的例子......

string sql = " // here is my sql query ";
string connectionstring = " // Here is my connection string.... ";

using (SqlConnection connection = new SqlConnection(connectionstring))
using (SqlCommand command = new SqlCommand(sql,connection)) 
{
    connection.Open();
    bool? ev = (bool?)command.ExecuteScalar();

    if (ev.HasValue == true && ev.Value == true)
    {
        MessageBox.Show("some error");
    }
}