当没有找到结果时,处理ExecuteScalar返回null

我有这个代码可能返回没有找到结果 – 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任何地方都会遇到此问题,因此您应该考虑使用如下所示的通用帮助程序function, SO User Rein已在此处的相关问题中进行了编写。

这样做:

 result = ConvertFromDBVal(sqlcom.ExecuteScalar()); 

使用通用函数:

 public static T ConvertFromDBVal(object obj) { if (obj == null || obj == DBNull.Value) { return default(T); // returns the default value for the type } else { return (T)obj; } } 
 result = sqlcom.ExecuteScalar() !=null ? sqlcom.ExecuteScalar().ToString() : string.Empty;