2013-04-26 2 views
0

У меня есть запрос, который заполняет comboBox и отбрасывает выделение из comboBox, передавая значение другому запросу.Выбор записи из comboBox, заполненной mysql

код у меня до сих пор:

MySqlCommand SelectCommandAirport = new MySqlCommand("SELECT AirportName, DataTable FROM AirportList;", myConnAirport); 
MySqlDataReader myAirportReader; 
    myConnAirport.Open(); 

    myAirportReader = SelectCommandAirport.ExecuteReader(); 
    DataTable dataTable = new DataTable(); 
    dataTable.Columns.Add(new DataColumn("AirportName")); 
    dataTable.Columns.Add(new DataColumn("DataTable")); 
    comboBox1.DataSource = dataTable; 
    comboBox1.ValueMember = "AirportName"; 
    comboBox1.DisplayMember = "DataTable"; 
try 
    { 
     while (myAirportReader.Read()) 
     { 
      DataRow row = dataTable.NewRow(); 
      row["AirportName"] = myAirportReader[1]; 
      row["DataTable"] = myAirportReader[0]; 
      dataTable.Rows.Add(row); 

      SelectAirport.sAirport = comboBox1.SelectedItem.ToString(); 
     } 
    } 
catch (Exception ex) 
    { 
    MessageBox.Show(ex.Message); 
    } 

Тогда у меня есть seond запрос, который должен использовать результат выбора COMBOBOX в качестве переменной для второго запроса.

string airportid; 
    airportid = SelectAirport.sAirport; 
    MySqlCommand SelectCommand = new MySqlCommand("SELECT ArriveDepart, Flight, FlightDate, ScheduledTime, IATALookup, Terminal, RemarkswithTime, Logo FROM '" + airportid + "' WHERE Flight = '" + this.flightno_txt.Text + "';", myConnFlight); 

Когда я запускаю код, я получаю сообщение об ошибке SQL, который говорит "System.Data.DataRowView WHERE Flight =".

Becuse это не работает. Я могу предположить, что код верен. Может ли кто-нибудь увидеть, где я ошибаюсь.

Большое спасибо заранее.

DCJ

Когда я запускаю код, который я получаю сообщение об ошибке SQL, которая показывает содержание

+0

Is airportID имя вашего стола? У вас есть каждый аэропорт за своим столом? Вот как сейчас написан запрос. – Jasmine

ответ

0

Это называется каскадным раскрывающимся - премьер пример «выбрать страну, затем выбрать вашу провинцию»

ASP.Net теперь предоставляет возможность сделать это намного проще, чем было. Если вы не можете использовать эту функцию, то то, что вы уже делаете, в значительной степени правильное - выберите один, затем отправьте следующий запрос и загрузите поле из него.

Это из ASP.Net AJAX Library ... http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/CascadingDropDown/CascadingDropDown.aspx

ТАКЖЕ, у вас есть дополнительная работа в вашем примере кода. При выполнении команды ExecuteReader, он возвращает DataReader объект, который может быть связан непосредственно с вашим контролем, как это ...

MySqlCommand SelectCommandAirport = new MySqlCommand("SELECT AirportName, DataTable FROM AirportList;", myConnAirport); 

MySqlDataReader myAirportReader; 
myConnAirport.Open(); 

myAirportReader = SelectCommandAirport.ExecuteReader(); 
comboBox1.DataSource = dataTable; 
comboBox1.ValueMember = "AirportName"; 
comboBox1.DisplayMember = "DataTable"; 
comboBox1.DataBind(); 

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

Я подозреваю, что ваша ошибка SQL связана с тем, что вы обрабатываете имя аэропорта как имя таблицы, а не значение данных. Таким образом, ваш запрос должен быть больше, как это (я люблю использовать String.Format более четко указать позиции параметра внутри строки):

String.Format("SELECT ArriveDepart, Flight, FlightDate, ScheduledTime, IATALookup, 
    Terminal, RemarkswithTime, Logo 
    FROM AIRPORT_TABLE WHERE AirportName = '{0}' 
     AND Flight = {1}", airportId, flightno_txt.Text) 

И вам нужно заменить AIRPORT_TABLE с реальным именем вашей таблицы, если это действительно то, как он должен работать. Просто догадка.

Смежные вопросы