伙计我需要一些帮助。这是我第一次开发一个包含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
}
我做错了什么?
非常感谢帮助。
问候。
答案 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");
}
}