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