使用文本框和按钮查找数据库中的记录

时间:2011-07-06 19:51:16

标签: c# database search

我一直在学习tutorial on Home and Learn关于设置数据库的知识。目前,我正在学习如何在数据库中查找记录。我正试图让我的GO!按钮在我的数据表中搜索一个成分,我已经完全遵循了教程并且在我的错误列表中没有错误,但这行代码:

returnRows = dataRecipe.Tables["CookBookRecipes"].Select("Ingredients = '" + searchOut + "'");

它会停止我的程序,并显示以下消息:

  

对象引用未设置为   对象的实例。

我搜索了这个含义,我想这意味着我的returnRows变量为null,但我无法确定。有人可以帮我解决这个问题吗?

以下是我的搜索按钮中的完整代码:

System.Data.SqlClient.SqlConnection con;
System.Data.SqlClient.SqlDataAdapter dataAdapt;
DataSet dataRecipe;

private void btnSearch_Click(object sender, EventArgs e)
{

    if (tbSearch.TextLength >= 1)
   {
        MessageBox.Show("This will work when you put it a word!");

        // Search code //

        string searchOut = tbSearch.Text;
        int result = 0;
        DataRow[] returnRows;

        returnRows = dataRecipe.Tables["CookBookRecipes"].Select("Ingredients = '" + searchOut + "'");


        result = returnRows.Length;

        if (result > 0)
        {
            DataRow rowBack;
            rowBack = returnRows[0];
            MessageBox.Show(rowBack[3].ToString());
        }
        else
        {
            MessageBox.Show("No such record");
        }

   }

   else
    {
       MessageBox.Show("Please enter an ingredient to search for!", "Search");
   }
}

以下是我的表单的完整代码:

using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Cookbook {
    public partial class BrowseIngredients : Form {
       public BrowseIngredients() { InitializeComponent(); }
       private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
           if (MessageBox.Show("Exit Cook Book?", "Exit?", MessageBoxButtons.OKCanc

我非常喜欢初学者,如果我不明白真正的问题,请原谅我!

2 个答案:

答案 0 :(得分:0)

看起来您可能没有实例化您的数据集。你声明它但你没有实例化它,除非你在你的代码中的其他地方没有向我们展示过它。

DataSet dataRecipe;

你可以在页面加载事件中实例化它,这没关系。

private void Form_Load(object sender, EventArgs e)
{
    dataRecipe = new DataSet();
}

答案 1 :(得分:0)

看看你正在使用的教程我想我可以看到你哪里出错了(我不怪你 - 教程并不完全清楚)。

基于此阶段:http://www.homeandlearn.co.uk/csharp/csharp_s12p5.html

您将在Form Load方法中使用以下语句:

string sql = "SELECT * From CookBookRecipes";
dataAdapt = new System.Data.SqlClient.SqlDataAdapter(sql, con);

然而,教程然后告诉您添加以下内容以将数据从数据适配器添加到数据集中,但实际上并未在上下文中显示代码 - 我怀疑这是您出错的地方。 / p>

在上述行之后,您需要添加以下内容:

dataAdapt.Fill( dataRecipe, "CookBookRecipes" );

然后,当您尝试从dataRecipe.Tables [“CookBookRecipes”]获取行时,您将不会返回对null对象的引用。