Для выполнения домашней задачи я должен разработать приложение С# для взаимодействия с файлом базы данных SQL Server (.mdf
), предоставляя dataGridView
для просмотра содержимого и несколько кнопок для выполнения запросов.
Я хорошо себя чувствую, нашел, как добавлять запросы к моему адаптеру таблицы, как их называть и т.д.
Теперь у меня возникают проблемы с созданием запроса, который возвращает максимальную оплату в hourlyPayRate
.
У меня есть employee
базы данных, который содержит следующие атрибуты: employeeID, name, position, hourlyPayRate
.
Мой запрос
SELECT MAX(hourlyPayRate)
FROM employee
Я прямо щелкните employeeTableAdapter
, нажмите "Добавить запрос...", назовите его " Max
и введите запрос. Когда я нахожусь в порядке, я получаю следующее сообщение об ошибке:
Схема, возвращаемая новым запросом, отличается от базового запроса.
Запрос выполняется правильно в построителе запросов, только когда я нажимаю "ОК", чтобы сохранить его, чтобы получить ошибку.
Оглядываясь на SE, окончательных ответов на этот вопрос нет.
Спасибо, Майкл.
Решение было найдено для всех, кого это интересует.
Проблема заключается в том, что запрос возвращает таблицу с различным количеством столбцов, которые находятся в базе данных.
Обычно в большинстве СУБД это не проблема, но по какой-то причине Visual Studio не имеет ничего подобного.
Решением был этот запрос:
SELECT employeeID, name, position, hourlyPayRate FROM employee WHERE (hourlyPayRate = (SELECT MAX(hourlyPayRate) AS MaxRate FROM employee AS TempTable))
И затем обрезание ненужного результата, как вам нравится. Для меня это было так же просто, как наличие метки, которая выводила данные только из атрибута hourlyPayRate.
Фактическая причина этого заключается в том, что базовый 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.
SELECT MAX(hourlyPayRate) as Expr1 FROM employee
Без улучшений.