melvintcs Ответов: 3

возвращает пустую строку, если запись не найдена


База данных
dbItem:
ID     Description     Price
1       Apple           4
2       Banana          6
3       Papaya          7


Запрос:
SELECT * FROM dbItem WHERE price >= 10

есть ли вероятность, что sql-запрос может вернуть нам пустую строку, если запись не найдена? (как пример ниже)

Пример:
ID         Description      Price
0          No record          0

Приведенные выше данные будут помещены внутрь ASP gridview.
да, gridview имеет элемент управления(EmptyDataTemplate) для отображения, если внутри gridview нет данных. но я все равно хочу, чтобы сетка заполнилась пустой строкой.

я попытался создать DataTable, но как только я установил datasource=dataTable, ошибка показывает: "и DataSource, и DataSourceID определены on..."
GridView1.DataSourceID = null 

^ не помогает

3 Ответов

Рейтинг:
2

Peter Leow

Ситуация с пустой строкой должна быть рассмотрена в коде, а не в базе данных, это не только разделение проблем, но и, что более важно, она является общей, например, что если условие изменяется, скажем, >= любое число, вы не можете каждый раз менять sql-запрос, не так ли?
Предлагаю проверить для возврата строки из SQL запроса, если ноль, создать объект DataTable динамически с колоннами идентична ожидаемой доходности столбцов SQL-запроса ,т. е. идентификатор, описание, цена, затем добавить строку с данными, которые вы решаете, т. е. 0, 'нет записей', 0. Затем привязать его к сетке.
Смотрите пример:
1. шоу-заголовок и нижний колонтитул-строка-в-пустую строку[^]
2. как+добавить+строку+в+данные+таблицу[^]
Это решение позаботится о любой ситуации с нулевой строкой и будет многоразовым.


melvintcs

Привет, я действительно попробовал метод datatable. Как было сказано в вопросе выше, я столкнулся с ошибкой. я уже присвоить sqldatasource для таблицы в HTML, то код позади, я снова присвоить объект DataTable к GridView в. есть какое-нибудь решение для этого?

Peter Leow

Вы читали ссылки, которые я предоставил?

Рейтинг:
2

DamithSL

попробуйте SQL, как показано ниже

IF EXISTS ( SELECT * FROM dbItem WHERE price >= 10)
BEGIN
    SELECT * FROM dbItem WHERE price >= 10
END
ELSE
  SELECT 0 as id, 'No record' as Description, 0 as price

ДЕМОНСТРАЦИЯ[^]

В MySQL:
IF (SELECT * FROM dbItem WHERE price >= 10) THEN
BEGIN
    SELECT * FROM dbItem WHERE price >= 10;
END;
ELSE
BEGIN
    SELECT 0 as id, 'No record' as Description, 0 as price
END;
END IF;


melvintcs

я использую mysql querybrowser и mysql workbench, запрос не может начинаться с "IF"

melvintcs

я переписываю в mySQl, но все равно не везет
Если(выберите * из dbItem, где цена >= 10), то
НАЧАТЬ
Выберите * из dbItem, где цена >= 10
КОНЕЦ;
ЕЩЕ
НАЧАТЬ
Выбрать 0 как ID, 'нет записей', как описание, 0 как цена
КОНЕЦ
КОНЕЦ, ЕСЛИ

DamithSL

какие-нибудь исключения? вы получаете правильный результат при запуске на верстаке?

melvintcs

Код Ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с 'IF(SELECT * FROM dbItem WHERE price >= 10), а затем начните SELECT * FROM dbItem' в строке 1

DamithSL

Проверьте мою обновленную инструкцию sql

Рейтинг:
2

melvintcs

Я нашел простое решение ..

SELECT * FROM dbItem WHERE price >= 10
UNION
SELECT 0 as id, 'No record' as Description, 0 as price

но плохо то, что "пустая запись" все равно показывает, если запись найдена