Поиск записей в базе данных с помощью текстового поля и кнопки - PullRequest
1 голос
/ 06 июля 2011

Я учился на уроке в Home и Learn по настройке баз данных. В настоящее время я учусь находить записи в базе данных. Я пытаюсь получить свой GO! Нажмите кнопку для поиска ингредиента в моей таблице данных, и я внимательно следил за учебником, и в моем списке ошибок нет ошибок, но эта строка кода:

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

Останавливает мою программу и выдает следующее сообщение:

Ссылка на объект не установлена ​​на экземпляр объекта.

Я искал значение, и я думаю, это означает, что моя переменная returnRows равна нулю, но я не уверен. Может кто-нибудь помочь мне решить эту проблему?

Вот мой полный код в моей кнопке поиска:

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 голосов
/ 07 июля 2011

Глядя на учебник, который вы используете, я думаю, что вижу, где вы ошиблись (и я не виню вас - учебник не совсем понятен).

На основании этого этапа: http://www.homeandlearn.co.uk/csharp/csharp_s12p5.html

Вы будете иметь в своем методе загрузки формы выражение что-то вроде:

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

Тем не менее, в этом учебнике вам нужно добавить следующее, чтобы получить данные из адаптера данных в набор данных, но на самом деле код не отображается в контексте - и я подозреваю, что именно здесь вы ошиблись.

Сразу после вышеупомянутых строк вам нужно добавить это:

dataAdapt.Fill( dataRecipe, "CookBookRecipes" );

Затем, когда вы попытаетесь получить строки из dataRecipe.Tables ["CookBookRecipes"], вы не будете возвращать ссылку на нулевой объект.

0 голосов
/ 07 июля 2011

Похоже, вы можете не создавать экземпляр своего набора данных.Вы объявляете это, но не создаете его экземпляр, если только вы не сделаете это в другом месте своего кода, который вы не показали нам.

DataSet dataRecipe;

Вы могли бы установить это в событии загрузки страницы, и это было бы хорошо.

private void Form_Load(object sender, EventArgs e)
{
    dataRecipe = new DataSet();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...