2016-06-13 5 views
-3

Ich habe ein Problem mit meiner Codierung. Dies ist ein Quellcode, den ich für dieses Programm kodiere.Operation ist nicht gültig aufgrund des aktuellen Status des Objekts in C#

OracleConnection kon; 
    public Form2() 
    { 
     InitializeComponent(); 
     FillCombo(); 
    } 

    void FillCombo() 
    { 
     OracleConnection kon = Koneksi.getKoneksi(); 
     OracleCommand cmd; 
     try 
     { 
      kon.Open(); 
      cmd = new OracleCommand(); 
      cmd.Connection = kon; 

      cmd.CommandText = "SELECT * FROM JOBS"; 

      OracleDataReader reader = cmd.ExecuteReader(); 
      comboBox1.Items.Add(reader.GetString(reader.GetOrdinal("JOB_ID"))); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Data has been failed to show: " + ex.Message); 
     } 
     finally 
     { 
      kon.Close(); 
      kon.Dispose(); 
     } 
    } 
} 

}

Wenn ich dieses Programm ausgeführt wird, Systemdialog zeigen „Operation ist nicht gültig aufgrund der aktuellen Zustand des Objekts“.

When I running the Program

There's No Error

Wie um diesen Fehler zu lösen? Ich werde Daten an ComboBox von der Datenbank binden. Ich meine, ich möchte hinzufügen JOB_ID zu Combo-Box wie AD_VP, HR_REP, etc BTW.

Btw, tut mir leid, wenn mein Englisch ist schlecht.

+0

Welche Zeile erzeugt den Fehler kon.Open? oder, cmd.ExecuteReader? – BugFinder

+3

Bitte zeigen Sie COMPLETE Stack-Trace und störende Codezeile an. – OldProgrammer

+0

Ist es Windows oder Web-Anwendung? –

Antwort

0

Eine offensichtliche Sache, dass Sie fehlt, ist nicht reader.Read() angerufen hat, bevor sie von Ihren Datenleser zu lesen versuchen. Wenn Sie OracleDataReader reader = cmd.ExecuteReader(); aufrufen, wird der Datenleser zu diesem Zeitpunkt vor der erste Datensatz positioniert. Sie müssen reader.Read() aufrufen, um es zum ersten Datensatz zu verschieben. Dies kann leicht den Fehler erklären, den Sie bekommen haben.

OracleDataReader reader = cmd.ExecuteReader(); 
reader.Read(); // Add this. Check for a return value of false if necessary. 
comboBox1.Items.Add(reader.GetString(reader.GetOrdinal("JOB_ID"))); 

Abgesehen davon wäre es auch eine gute Idee, den Datenleser ordnungsgemäß zu entsorgen. Möglicherweise möchten Sie dafür einen using Block verwenden.

+0

Ok, ich habe diesen Code versucht, der funktioniert hat. Aber nur 1, überhaupt nicht ... –

+0

nur AD_PRES in der Combo-Box –

-2

Sie versuchen also, die Ordnungsnummer der JOB_ID-Spalte zu einer Combobox hinzuzufügen. Wie Sie wahrscheinlich wissen, kehrt GetOrdinal in int zurück. Warum gehst du nicht einfach gehen wie folgt aus:

... 
comboBox1.Items.Add(Convert.ToString(reader.GetOrdinal("JOB_ID"))); 
... 
+0

Der Code von OP liest den *** Wert *** von 'job_id'. Ihr vorgeschlagener Code gibt den *** Resultset-Index *** von 'job_id' zurück. Nicht das Gleiche. In jedem Fall dürfte dies jedoch nichts mit dem tatsächlichen Fehler von OP zu tun haben. – sstan

+0

Ich habe versucht, Ihren Code, sondern nur "0" in der ComboBox. Ich meine, ich möchte JOB_ID in ComboBox wie AD_VP, HR_REP usw. hinzufügen. –

+0

Sorry. Hab dein Problem falsch verstanden. –

Verwandte Themen