C# 对象引用未设置为对象的实例,但我看不到任何非法内容

C# 对象引用未设置为对象的实例,但我看不到任何非法内容,c#,visual-studio,ms-access,visual-studio-2013,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

这可能会被标记为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();
}
我试图读单词和反义词两列,并返回同一行的单词,只是不同的列。它不断显示错误,我尝试搜索互联网,但没有发现任何有用的东西…

这是一个可疑的问题:

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;
}

它一直显示错误
错误文本是什么?使用调试器。我不确定这是重复的原因。问题不是什么是NullReferenceException。问题是为什么这个代码会抛出一个。尽管如前所述,这是在调试器中更容易找到的类型。除非它是生产代码,而您所得到的只是抛出异常的方法。然后我们必须阅读代码并播放“查找空值”。@ScottHannen这是“如何修复它”部分的重复。修复NRE的方法每次都是相同的,如果不断重复“断开链接调用并找到空的特定部分,然后在程序中回溯并找出该变量为空的原因”,则不会给站点增加多少价值。现在,如果问题是“我发现
command1.ExecuteScalar()
将返回null,从而导致
.ToString()
抛出一个NRE,我不明白为什么我没有从
ExecuteScalar()
中获得一个值”,这将不是一个重复的问题。