Схема, возвращаемая новым запросом, отличается от базового запроса (C # / SQL - VS 2012)

1

Для выполнения домашней задачи я должен разработать приложение С# для взаимодействия с файлом базы данных SQL Server (.mdf), предоставляя dataGridView для просмотра содержимого и несколько кнопок для выполнения запросов.

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

Теперь у меня возникают проблемы с созданием запроса, который возвращает максимальную оплату в hourlyPayRate.

У меня есть employee базы данных, который содержит следующие атрибуты: employeeID, name, position, hourlyPayRate.

Мой запрос

SELECT MAX(hourlyPayRate) 
FROM employee

Я прямо щелкните employeeTableAdapter, нажмите "Добавить запрос...", назовите его " Max и введите запрос. Когда я нахожусь в порядке, я получаю следующее сообщение об ошибке:

Схема, возвращаемая новым запросом, отличается от базового запроса.

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

Оглядываясь на SE, окончательных ответов на этот вопрос нет.

Спасибо, Майкл.

  • 0
    Вы пытались наложить псевдоним на свой столбец в запросе? Пример: «ВЫБЕРИТЕ МАКС. (hourlyPayRate) как MaxPayRate FROM сотрудника». Это растянуто, но dataGridView может не работать в столбце без имени.
  • 0
    Я пробовал SELECT MAX(hourlyPayRate) as Expr1 FROM employee Без улучшений.
Показать ещё 1 комментарий
Теги:
datagridview

2 ответа

1

Решение было найдено для всех, кого это интересует.

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

Обычно в большинстве СУБД это не проблема, но по какой-то причине Visual Studio не имеет ничего подобного.

Решением был этот запрос:

SELECT employeeID, name, position, hourlyPayRate FROM employee WHERE (hourlyPayRate = (SELECT MAX(hourlyPayRate) AS MaxRate FROM employee AS TempTable))

И затем обрезание ненужного результата, как вам нравится. Для меня это было так же просто, как наличие метки, которая выводила данные только из атрибута hourlyPayRate.

0

Фактическая причина этого заключается в том, что базовый QUERY возвращает больше или меньше столбцов, чем QUERY, которые вы добавляете. Visual Studio заботится об этом; и не должен, в конце концов, это новый запрос.

ПРИМЕЧАНИЕ. Мы говорим столбцы запросов, а не столбцы таблицы базы данных. Ошибка в отношении базового запроса - например, заполнение, и, возможно, вы хотите заполнить и скрыть поле foreignID - потому что ваш базовый запрос выводит этот столбец, а ваш добавленный запрос - нет - новый запрос отличается от базы в том, что столбцы не совпадают. (Я думаю, что это сделано для обеспечения привязки связанных объектов, но я действительно не знаю (думаю, datagridview.)

Так, например,

Fill() Query
SELECT        Id, Name, FKtblThing_ID
FROM            ITEMS

Добавление этого запроса работает.

FillByID() Query
SELECT        Id, Name, FKtblThing_ID
FROM            ITEMS
WHERE        (FKtblThing_ID = @FKtbl_ThingID)

Если бы вы попробовали это - это не сработало бы.

FillByID() Query
SELECT        Id, Name
FROM            ITEMS
WHERE        (FKtblThing_ID = @FKtbl_ThingID)

Это ошибка, которую вы получите:

The schema returned by the new query differs from the base query.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню