Требуется отладка SQL-запросов - PullRequest
1 голос
/ 11 февраля 2010

Я работаю в Winforms с C #. вот мой код

query = "SELECT max(Appointment_Time) FROM Appointments WHERE (Appointment_Status = 'D')";
dset = db.GetRecords(query,"Appointments");
ctime_Label.Text = dset.Tables["Appointments"].Rows[0]["Appointment_Time"].ToString();

db.GETRecords - это функция класса, которая предоставляет мне sql-сервисы, просто возвращает мне набор данных. я продолжаю получать сообщение об ошибке "столбец 'Appointment_Time' не принадлежит таблице назначений", что глупо, потому что

  • когда я вставляю значения его работает нормально.
  • когда я НЕ пользуюсь функция max (Appointment_Time) это работает нормально

в чем здесь проблема .. я думаю, что есть что-то, что связано с функцией max (). Любое предложение или альтернатива для этого

Ответы [ 2 ]

6 голосов
/ 11 февраля 2010

Когда вы применяете функцию в предложении SELECT, сервер должен выбрать имя для результирующего столбца, это обычно отражает то, что делает функция - что-то вроде max(Appointment_Time). Поля, используемые в качестве аргументов функции, выглядят как «скрытые». Вот почему поле Appointment_Time невидимо для вызывающего кода в вашем случае.

Вы должны указать, что вы хотите, чтобы агрегированное поле вызывалось в SQL, используя AS, например ::

SELECT max(Appointment_Time) AS Max_Appointment_Time
FROM Appointments WHERE (Appointment_Status = 'D')

Затем обратитесь к полю как Max_Appointment_Time в коде вызова. Вы можете использовать то же имя, что и поле источника, если хотите.

2 голосов
/ 11 февраля 2010

Запустите запрос в SQL Server и посмотрите, что вы получите.

Теперь попробуйте:

 SELECT max(Appointment_Time) as A_Time FROM Appointments WHERE (Appointment_Status = 'D')";

, а затем

 ctime_Label.Text = dset.Tables["Appointments"].Rows[0]["A_Time"].ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...