C# 在数据库表中搜索条目时出现NullReferenceException错误

C# 在数据库表中搜索条目时出现NullReferenceException错误,c#,C#,我正在从事一个相对简单的C项目,该项目通过OleDb连接Access数据库,并具有各种功能,如添加、删除和编辑记录。现在,在尝试实现数据库搜索之前,一切都很顺利 searchbox代码中的下一行在调试期间抛出异常,但我不确定导致异常中断的实际空值是什么 ReturnedResults = DBDataSet.Tables["Movies"].Select("Title like '%" + Search + "%'"); 因此,我们的目标是搜索数据库中的“Movies”表,并根据存储在“sea

我正在从事一个相对简单的C项目,该项目通过OleDb连接Access数据库,并具有各种功能,如添加、删除和编辑记录。现在,在尝试实现数据库搜索之前,一切都很顺利

searchbox代码中的下一行在调试期间抛出异常,但我不确定导致异常中断的实际空值是什么

ReturnedResults = DBDataSet.Tables["Movies"].Select("Title like '%" + Search + "%'");
因此,我们的目标是搜索数据库中的“Movies”表,并根据存储在“search”字符串中的用户输入查找电影

下面可以找到搜索框的代码,底部提供了数据库初始化和连接

private void SearchTextBox_Changed(object sender, EventArgs e)
{
  string SearchString = SearchTextBox.Text.ToString();
  int Results = 0;
  DataRow[] ReturnedResults;

  ReturnedResults = DataSet.Tables["Movies"].Select("Title like '%" + SearchString + "%'");
  Results = ReturnedResults.Length;

  if (Results > 0)
 {
    SearchResultsBox.Items.Clear();
    for (int i = 0; i <= Results; i++)
    {
      DataRow Row;
      Row = ReturnedResults[i];
      SearchResultsBox.Items.Add(Row["Title"].ToString());
    }
 }
  else
 {
   SearchResultsBox.Items.Clear();
   MessageBox.Show("Error! No items found.");
 }
}

您的语句中有多个内容可以为null。DBDataSet可以为null,或者表不存在。您可以在行之前添加以下检查

if(DBDataSet != null && 
   DBDataSet.Tables.Count > 0 && 
   DBDataSet.Tables["Movies"] != null)
{
    ReturnedResults = DBDataSet.Tables["Movies"].Select("Title like '%" + Search + "%'");
    //....  rest of your code
您也可以尝试根据表[0]而不是表电影访问记录

编辑:

对于注释中提到的下一个问题,For循环将一直执行到长度。应该是这样的:

for (int i = 0; i < Results; i++) // Less than (<) not less than equal to 
    {
      DataRow Row;
      Row = ReturnedResults[i];
      SearchResultsBox.Items.Add(Row["Title"].ToString());
    }

您需要修改条件并记住索引从0开始,您将得到行,直到结果-1。在您的情况下,代码中出现多个空引用,根据您在下一行中的注释,您得到了错误 ReturnedResults=DBDataSet.Tables[Movies]。选择类似“%+Search+%”的标题

在上述情况下,DBDataSet可能为空或其表中没有行等。。所以最好的方法是在过滤前检查

if(DBDataSet != null && 
   DBDataSet.Tables.Count > 0 && 
   DBDataSet.Tables["Movies"] != null && DBDataset.Tables["Movies"].Rows.Count > 0)
{

ReturnedResults = DBDataSet.Tables["Movies"].Select("Title like '%" + Search + "%'");

}

设置表[0]解决了空异常,但出现了另一个问题。我从以下行收到一个“索引超出了数组的边界”:Row=ReturnedResults[I];嗯,注意一件事。在for循环的签入中,将条件修改为iif(DBDataSet != null && DBDataSet.Tables.Count > 0 && DBDataSet.Tables["Movies"] != null && DBDataset.Tables["Movies"].Rows.Count > 0) { ReturnedResults = DBDataSet.Tables["Movies"].Select("Title like '%" + Search + "%'"); }