Member 9983063 Ответов: 4

Datatable возвращает нулевые значения


Привет, ребята, я выбираю значение из базы данных, но datatable возвращает нулевые значения

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

connection.Open();
            DataSet dsa1 = new DataSet();
            DataTable dt1 = new DataTable();
            dsa1.Tables.Add(dt1);
            OleDbDataAdapter da1 = new OleDbDataAdapter();
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                da1 = new OleDbDataAdapter("SELECT [Price] from [Purchase Record] where [Product Name] = '" + dataGridView1.Rows[i].Cells[1].Value.ToString() + "'", connection);
                da1.Fill(dt1);
                dataGridView2.DataSource = dt1;
                connection.Close();
            }

David_Wimbley

Итак, с какой проблемой вы сталкиваетесь с нулевыми значениями из вашей БД?

Без большой информации простым решением было бы запустить инструкции update в вашей БД, чтобы предотвратить возврат любых нулевых столбцов. Пример: если цена равна нулю, установите Price == 0.

Другим решением было бы, основываясь на том факте, что вы используете встроенный запрос, использовать ISNULL([Price], 0) вместо просто [Price].

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

Видите, что отсутствие достаточной информации о вашей проблеме не очень полезно?

Member 9983063

моя проблема в том что у меня есть 2 таблицы в моей базе данных одна продажа а другая покупка я хочу показать цену покупки в форме продажи в c#

Arunprasath Natarajan

Вы пробовали добавить

4 Ответов

Рейтинг:
1

K-SIS

Есть логическая ошибка.
1. Вы заполняете цикл, поэтому после каждого заполнения он будет стирать предыдущие заполненные данные. (Данные заменяются, а не добавляются.)
2. соединение замкнуто в цикле, поэтому после первой итерации объект таблицы будет равен нулю.


Maciej Los

Хороший улов!
5.

Member 9983063

но мне нужно значение datagridview all rows я думаю, что это можно сделать с помощью цикла, если нет, пожалуйста, подскажите мне, как я могу это сделать??

Рейтинг:
1

Wendelius

Я не уверен, что правильно понимаю ситуацию, но ... ..

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

Таким образом, это выглядит так, как будто вы пытаетесь заполнить данные в сетке в два этапа: сначала вы получаете начальный набор данных, а затем пытаетесь получить цены для ранее выбранных строк.

Если это так, то обычно они не выполняются как отдельные операции. Вместо этого данные обычно извлекаются за один вызов, а соединение используется для корректной выборки данных из двух таблиц одновременно. Взгляните на Визуальное представление SQL-соединений[^]


Рейтинг:
0

Pradeep Prasanna Ekanayaka

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

connection.Open();
            DataSet dsa1 = new DataSet();
            DataTable dt1 = new DataTable();
            dsa1.Tables.Add(dt1);
            OleDbDataAdapter da1 = new OleDbDataAdapter();
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                da1 = new OleDbDataAdapter("SELECT [Price] from [Purchase Record] where [Product Name] = '" + dataGridView1.Rows[i].Cells[1].Value.ToString() + "'", connection);
                da1.Fill(dt1);
                int y=dataGridView1.Rows.Add();
                dataGridView1.Rows[y].Cells[0].Value=dt1.Rows[0].Field<double>(0);
                dt1.Clear();
                connection.Close();
            }


Рейтинг:
0

K-SIS

Сначала отсоедините выходное соединение.
Попробуйте эту конструкцию в цикле

Вставить в таблицу 1 / curser Выберите [Цена] из [запись покупки], где [название продукта] = '" + dataGridView1. Rows[i].Клетки[1].Значение.Метод toString() + "'"

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


Philippe Mori

Вместо того чтобы публиковать 2 частичных ответа, вы должны опубликовать один хороший ответ...