C# 在找不到结果时处理返回null的ExecuteScalar

C# 在找不到结果时处理返回null的ExecuteScalar,c#,sql,sql-server,C#,Sql,Sql Server,我得到的代码可能不会返回任何结果-null String result string searchUby = "SELECT text FROM rooms WHERE year=@year AND event=@eventAND text=@text AND z is NULL"; SqlCommand sqlcom = new SqlCommand(searchUby, conn); sqlcom.Parameters.Ad

我得到的代码可能不会返回任何结果-null

 String result
 string searchUby = "SELECT text FROM rooms WHERE year=@year AND event=@eventAND text=@text AND z is NULL";
                SqlCommand sqlcom = new SqlCommand(searchUby, conn);
                sqlcom.Parameters.AddWithValue("@event",event.Text);
                sqlcom.Parameters.AddWithValue("@text", cb_room.SelectedItem);
                sqlcom.Parameters.AddWithValue("@year",klientClass.Year());
                conn.Open();                  
                result = sqlcom.ExecuteScalar().ToString(); // on this line ex occurs

                conn.Close();
我得到一个例外:

NullReferenceException: Object reference not set to an instance of an object. 
有人能帮我解决这个问题吗?

试试这个:

result = (sqlcom.ExecuteScalar() ?? "").ToString();
如果返回
null
,则结果将为空字符串。您可以通过if语句处理该情况,并向用户通知一些消息,如:

object r = sqlcom.ExecuteScalar();  
if(r != null) result = r.ToString();
else {
  //code to handle the null case here...
}
您的
ExecuteScalar()
正在返回一个
DBNull
。无论您在哪里使用
ExecuteScalar
,都会遇到这个问题,因此您应该考虑使用下面这样的通用帮助函数,该函数已在相关问题中给出

只要这样做:

result = ConvertFromDBVal<string>(sqlcom.ExecuteScalar());
result=ConvertFromDBVal(sqlcom.ExecuteScalar());
使用泛型函数:

public static T ConvertFromDBVal<T>(object obj)
{
    if (obj == null || obj == DBNull.Value) {
        return default(T); // returns the default value for the type
    }
    else
    {
        return (T)obj;
    }
}
publicstatict ConvertFromDBVal(objectobj)
{
if(obj==null | | obj==DBNull.Value){
返回默认值(T);//返回类型的默认值
}
其他的
{
返回(T)obj;
}
}
result = sqlcom.ExecuteScalar() !=null ?  sqlcom.ExecuteScalar().ToString() : string.Empty;