2017-09-17 4 views
0

Ich versuche, Elemente aus der Datenbank in der Combobox zu laden, aber im Code kam dieser unerwartete Fehler und es scheint keinen ersichtlichen Grund zu geben. Bitte helfen Sie. Fehler: Argument 1: Konvertierung von 'string' in 'int' nicht möglich. In der Datenbank ist der Datentyp von 'PortName' Varchar.SqlDataReader Datentyp Konvertierungsfehler

Database Table

void FillCombo() 
    { 
     SqlConnection conn = new SqlConnection(global::flight_management.Properties.Settings.Default.conn); 
     string sql = "SELECT PortName FROM PORTS"; 
     SqlCommand exesql = new SqlCommand(sql, conn); 
     SqlDataReader myReader; 
     try 
     { 
      conn.Open(); 
      myReader = exesql.ExecuteReader(); 
      while(myReader.Read()) 
      { 
       string sName = myReader.GetString("PortName"); 
    // ERORR HERE: Argument 1: Cannot convert from 'string' to 'int' 
       ComboFromA.Items.Add("sName"); 
      } 
     } 

     catch (Exception ex) {lblError.Text = "Error Loading Airports: "+ ex.Message;} 
     finally {conn.Close();} 
    } 

Argument 1: Cannot convert from 'string' to 'int'

+0

Ich habe von Ihrem Code bemerkt, dass es scheint, eine deutliche Mischung von Verantwortlichkeiten darin zu haben. Es ist nicht die beste Vorgehensweise, Datenzugriff in einer Methode zu haben, die auch die Elemente in einer Combobox für die Benutzeroberfläche erstellt. Es ist vielleicht nur ein reiner Beispielcode, aber immer noch etwas zum Nachdenken :-) – WestDiscGolf

Antwort

1

Datenbanktypen sind wichtig, wenn Daten von SqlDataReader Lesen

Column ist String GetString

Column int GetInt32 ist

Column ist doppelt GetDouble

Sie die eine als Beispiel verwenden können Ich denke, das ist die beste Praxis lesen Wert von SqlDataReader

myReader.GetString(myReader.GetOrdinal("PortName")); 

ist und ersetzen

ComboFromA.Items.Add("sName") to ComboFromA.Items.Add(sName); 
0

versuchen Sie den folgenden Code

void FillCombo() 
    { 
     SqlConnection conn = new SqlConnection(global::flight_management.Properties.Settings.Default.conn); 
     string sql = "SELECT PortName FROM PORTS"; 
     SqlCommand exesql = new SqlCommand(sql, conn); 
     SqlDataReader myReader; 
     try 
     { 
      conn.Open(); 
      myReader = exesql.ExecuteReader(); 
      while(myReader.Read()) 
      { 
       string sName = myReader.GetString(0); 
    //ust use the index 0 for first attribute in select list 
       ComboFromA.Items.Add("sName"); 
      } 
     } 

     catch (Exception ex) {lblError.Text = "Error Loading Airports: "+ ex.Message;} 
     finally {conn.Close();} 
    }