当没有找到结果时,处理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;