Вы читаете только одну строку вашего набора результатов.
Вместо
if (mdr.Read())
вы должны использовать
while (mdr.Read())
Вы должны изменить SQL сказать SELECT appointmentId FROM U05lUM.appointment;
. Читать все столбцы (с SELECT *
) из таблицы расточительно и медленно, когда все, что вам нужно, это один столбец.
mdr.HasRows
всегда будет истинным внутри блоков if (mdr.Read())
или while (mdr.Read())
. Вы просто читаете строку, поэтому в наборе результатов определенно есть строки.
Ваш foreach(int id in mdr.GetInt32("appointmentId").ToString())
не делает то, что вы хотите. Он генерирует значение для каждого символа в строке, которую вы сделали из assignId.
И объект SqlDataReader
с именем mdr
необходимо очистить (Dispose
d) после использования. Это происходит автоматически с using(){}
.
Поэтому я предлагаю этот код.
...
string Query = "SELECT appointmentId FROM U05lUM.appointment;";
MySqlCommand command = new MySqlCommand(Query, Conn);
using (SqlDataReader resultSet = command.ExecuteReader())
{
while (resultSet.Read())
{
int id = resultSet.GetInt32("appointmentId")
AppointmentIDList.Add(id);
}
}
Это не будет быстрым, если ваша таблица большая, потому что ваш запрос должен сканировать каждую строку стол. Весь смысл SQL в том, чтобы позволить вам обрабатывать наборы данных на несколько порядков больше, чем ваша RAM. Вам следует подумать о разработке своей программы, чтобы она не считывала каждую строку без крайней необходимости.
Если все, что вам нужно, это точное количество строк, вы можете использовать COUNT(*)
. Это подсчитает количество строк в вашей таблице
...
int rowCount;
string Query = "SELECT COUNT(*) rowCount FROM U05lUM.appointment;";
MySqlCommand command = new MySqlCommand(Query, Conn);
using (SqlDataReader resultSet = command.ExecuteReader())
{
if (resultSet.Read()) // THIS result set has only one row.
{
rowCount = resultSet.GetInt32("rowCount")
}
}
Ваша СУБД умело справляется с обработкой COUNT(*)
. MAX(appointmentId)
также может работать. Он может отличаться от количества строк, если в вашей таблице отсутствуют пропущенные значения appointmentId
. Это может произойти, если некоторые строки были удалены.