#c# #mysql #datareader
#c# #mysql #datareader
Вопрос:
int availableSeat = 0;
string query = "select flight_no flight_seat from flight_info where flight_departure_time = @selectedFlight AND flight_from = @flightFrom AND flight_to = @flightTo ";
string url = "Server=localhost;Database=flight;uid=******;password=*****";
con1 = new MySqlConnection(url);
con1.Open();
cmd1 = new MySqlCommand(query,con1);
cmd1.Parameters.AddWithValue("@selectedFlight",comboBox3.SelectedItem);
cmd1.Parameters.AddWithValue("@flightFrom",comboBox1.SelectedItem);
cmd1.Parameters.AddWithValue("@flightTo",comboBox2.SelectedItem);
reader = cmd1.ExecuteReader();
while (reader.Read())
{
availableSeat.Equals(reader["flight_seat"]);
if(availableSeat > 0)
{
MessageBox.Show("The seat is available!!");
}
else
{
MessageBox.Show("Sorry, all seat has been booked!!");
}
}
con1.Close();
Как вы можете видеть здесь, я хотел бы сохранить flight_seat
столбец из SQL availableSeat
в, чтобы проверить, есть ли свободное место.
Как я могу это сделать? потому что он продолжает переходить к else.
Ответ №1:
availableSeat.Equals()
является ли сравнение не присваиванием. Вам нужно будет присвоить значение. Например
availableSeat = (int)reader["flight_seat"];
Ответ №2:
Измените его на:
availableSeat = (int)reader["flight_seat"]);
Equals()
Метод используется для сравнения (равенства), а не для присваивания. Кроме того, присваивания выполняются в C # путем установки переменной слева от =
результата оператора справа.
Вам нужно преобразовать значение в reader
an int
, потому что оно хранится как an object
. Вы также должны проверить null
значение, поскольку оно поступает из базы данных:
availableSeat = reader["flight_seat"].Equals(DBNull.Value)
? 0
: (int)reader["flight_seat"];
Комментарии:
1. Ммм, я думаю, что есть проблема. В нем говорится: «Было вызвано исключение типа System.invalidCaseException: nSpecified приведение недопустимо»
2. Тогда ваше
flight_seat
значение не являетсяint
значением. Вы должны проверить, какой базовый тип находится в базе данных MySQL. Например, если это какой-то типvarchar
, который вам нужно будет определитьavailableSeat
как astring
вместо.