对象引用未设置为对象的实例,但我认为没有任何违法行为

时间:2017-05-21 01:33:27

标签: c# visual-studio ms-access visual-studio-2013

这可能会被标记为dublicate或被关闭,但我需要问。什么是非法的?

private void btnFind_Click(object sender, EventArgs e)
{
    connection.Open();
    OleDbCommand command1 = new OleDbCommand();
    command1.Connection = connection;
    command1.CommandText = "select antonym from antonymsdb where word ='" + txtWord.Text + "'";
    string antonymdoc = command1.ExecuteScalar().ToString();
    lblAntonym.Text = antonymdoc;

    OleDbCommand command2 = new OleDbCommand();
    command2.Connection = connection;
    command2.CommandText = "select word from antonymsdb where antonym = '" + txtWord.Text + "'";
    string antonymdocx = command2.ExecuteScalar().ToString();
    lblAntonym.Text = antonymdocx;
    connection.Close();
}

我正在尝试读取 word 反义词这两列,并返回同一行的单词,只是不同的列。它一直显示错误,我尝试搜索互联网,但没有找到任何帮助......

1 个答案:

答案 0 :(得分:1)

这是一个嫌疑人:

string antonymdoc = command1.ExecuteScalar().ToString();

如果查询没有返回任何记录,则ExecuteScalar返回null。如果您尝试在null上调用.ToString(),则会获得NullReferenceException

通常我会先查看结果,看看它是否为null,以便我知道它是否返回了结果。

如果你只想在没有结果的情况下得到一个空字符串

string antonymdoc = command1.ExecuteScalar()?.ToString() ?? string.Empty;

这是

的简写
var output = command1.ExecuteScalar();
string antonymdoc = output != null ? output.ToString() : string.Empty;

这是

的简写
var output = command1.ExecuteScalar();
string antonymdoc;
if(output!=null)
{
    antonymdoc - output.ToString(); 
}
else
{
    antonymdoc = string.Empty;
}