Member 9983063 Ответов: 2

Если и еще проблема на combox close event


Привет, ребята, я столкнулся с аналогичной проблемой, я не знаю, почему проблема в том, что когда я закрываю и проверяю, является ли таблица данных нулевой, так что больше ничего не делаю, я хочу показать значение в текстовом поле, но это показывает значение в текстовом поле, но когда таблица данных равна нулю, так что это будет застрять или закрыть форму автоматически.
пожалуйста, ребята, помогите мне и дайте мне решение этой проблемы!

Что я уже пробовал:

DataSet dsa = new DataSet();
            DataTable dt = new DataTable();
            dsa.Tables.Add(dt);
            OleDbDataAdapter da = new OleDbDataAdapter();
            da = new OleDbDataAdapter("SELECT * FROM [Product Management] where [Product ID] = " + comboBox1.Text + "", connection);
            
            if (dsa != null)
            {
                da.Fill(dt);
                textBox2.Text = dt.Rows[0]["Product Name"].ToString();
                
            }
            else
            {
                MessageBox.Show("Hello World","Combobox1",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }

[no name]

"похожая проблема", похожая проблема на что?

Ваш код не соответствует вашему описанию. Вы не проверяете ни одну таблицу данных на null. Вы проверяете набор данных на наличие нуля, которым он никогда не будет.

Member 9983063

Сэр пожалуйста скажите мне где ошибка в моем коде

2 Ответов

Рейтинг:
5

Mehedi Shams

Привет член 9983063, следующая строка не проверяет наличие пустой таблицы.

if (dsa != null)

И он никогда не является нулевым, поскольку ему присваивается объект; выделяется память.
DataSet dsa = new DataSet();

Таким образом, условная проверка на самом деле не проверяет то, что вам нужно.

Что будет лучше всего, так это проверить количество строк, возвращаемых в datatable.
//if (dsa != null)
//{
//    da.Fill(dt);
//    textBox2.Text = dt.Rows[0]["Product Name"].ToString();
//}

da.Fill(dt);
if (dt.Rows.Count > 0)
{
    textBox2.Text = dt.Rows[0]["Product Name"].ToString();
}
else
{
    MessageBox.Show("Hello World", "Combobox1", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Набор данных в этой части не используется. Если он не используется в противном случае, вы можете удалить его.

Также обратите внимание на первый пункт из OriginalGriff. Это очень важно, чтобы не отправлять строку запроса по сети. Для маломасштабных внутрисетевых приложений это может быть не проблемой, но для крупномасштабных корпоративных приложений это очень важный люк. Поэтому лучше стоять на практике с самого начала.


Рейтинг:
1

OriginalGriff

Сделать две вещи:
1) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
2) Используйте отладчик, чтобы точно следить за тем, что происходит с вашим кодом. Поставьте точку останова в начале метода и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения. В какой-то момент должно быть очевидно, где он начинает идти не так, и вы можете начать оглядываться назад, чтобы выяснить, почему.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы сможете узнать!