我的代码是:
SqlConnection scn = new SqlConnection(ClsPublic.GetConnectionString());
SqlCommand scm = new SqlCommand("SELECT Name FROM Table WHERE (Blogger = @Blogger)", scn);
scm.Parameters.AddWithValue("@Blogger", lblBloger.Text);
scn.Open();
MyLabel.Text = scm.ExecuteScalar().ToString();
scn.Close();
在这一行:
lblLastNo.Text = scm.ExecuteScalar().ToString();
有这个错误:
对象引用未设置为对象的实例。
或当我使用if语句时,显示相同的错误
object Blogger= "";
if (Blogger.ToString() != string.Empty)
{
....
}
下面代码中的再次显示相同的错误。
答案 0 :(得分:3)
最有可能scm.ExecuteScalar()
为您带来空值。您需要在使用之前测试返回的值:
var result = scm.ExecuteScalar();
MyLabel.Text = result == null ? '' : result.ToString();
答案 1 :(得分:1)
scm.ExecuteScalar()
返回null,或scm
为null,或lblLastNo
为null。这是您收到错误“对象引用未设置...”的唯一原因。
答案 2 :(得分:1)
ExecuteScalar返回一个Object类型。这就是您在scm.ExecuteScalar().ToString();
或Blogger.ToString()
上有相同行为的原因。
ToString方法的对象类型默认实现返回Object类型的完全限定名称,如以下示例所示。
如果此对象为NULL,您将收到错误Object reference not set to an instance of an object.
你的第二个案例:
object blogger= "";
if (blogger.ToString() != string.Empty)
{
....
}
不应抛出异常但返回表示对象实例的字符串。例如:"YourNameSpace.Blogger"
答案 3 :(得分:-1)
请附上try catch块,以便您可以处理运行时异常,并使生活更容易理解问题。对于if (Blogger.ToString() != string.Empty)
,您可以检查Null条件或其字符串。然后,您可以检查String.IsNullorEmpty
string str=blogger.toString();
if (String.IsNullOrEmpty(str))
//do something
else
//do other part