Programm überspringt code



  • Guten Morgen,

    mein Ziel ist es einen SQL Code an ne SQL datenbank zu schicken und dadurch mit INNER JOIN den Inhalt einer anderen Tabelle über die ID zu holen (Aufbau siehe unten).

    System.Data.OleDb.OleDbDataReader r = null;
    
                string sql = "SELECT `BuildOrder.index`, `BuildOrder.steps`, `BuildOrder.InternalBuildName`, `BuildOrder.InternalVillageId`, `Villages.vilname` FROM `BuildOrder` INNER JOIN `Villages` ON `BuildOrder.InternalVillageId` = `Villages.ID` ORDER BY `BuildOrder.index`";
                Global.connection.Close();
                Global.connection.Open();
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(sql, Global.connection);
                r = cmd.ExecuteReader();
    
                if (r.HasRows)
                {
                    MessageBox.Show("ja");
                }
                else
                {
                    MessageBox.Show("nein");
                }
    

    Das Problem ist nur, dass mein Programm nach "r = cmd.ExecuteReader();" einfach stoppt und den Restlichen Teil der Funktion (if|else) einfach überspringt.

    Wenn ich die Anfrage ändere in "SELECT * FROM Villages" dann geht er über die Abfrage.

    Weiß einer, wiso der ganze Code ausgelassen wird?

    Aufbau meiner Datenbanken:

    BuildOrder
    ID index steps InternalBuildName InternalVillageId
    1 3 2 smith 90531

    Villages

    ID vilname
    90531 LALALALA



  • Ist das Statement überhaupt gültig?
    mach aus dem ` mal ein normales '



  • Ja man kann die Tabellennamen mit einem ` umschließen.

    (habs jetzt trotzdem mal mit ' probiert, aber klappen tuts nicht besser)



  • Stichwort: Exception (fangen)



  • Wird nicht angeschlagen.

    string sql = "SELECT `BuildOrder.index`, `BuildOrder.steps`, `BuildOrder.InternalBuildName`, `BuildOrder.InternalVillageId`, `Villages.vilname` FROM `BuildOrder` INNER JOIN `Villages` ON `BuildOrder.InternalVillageId` = `Villages.ID` ORDER BY `BuildOrder.index`";
                //sql = "SELECT * FROM Villages";
                Global.connection.Close();
                Global.connection.Open();
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(sql, Global.connection);
                try
                {
                    r = cmd.ExecuteReader();
                }
                catch (InvalidOperationException e)
                {
                    MessageBox.Show(e.Message);
                }
    

    Wenn ich mit Einzelschritte Debugge dann überspringt er einfach den kompletten folgenden Code.



  • Hallo,

    probier doch einerseits mal was passiert wenn du statt einer InvalidOperationException eine Exception fängst. Andererseits ist die Frage was für eine Datenbank du im Hintergrund ansprichst, der MS SQL Server benutzt z.B. meines Wissens nach nicht um Tabellen zu escapen, sondern []. Ausserdem darfst du nicht wie folgt escapen: \BuildOrder.index`, sondern mit `BuildOrder`.`index`.

    mfG KaPtainCugel



  • KPC schrieb:

    Ausserdem darfst du nicht wie folgt escapen: `BuildOrder.index`, sondern mit `BuildOrder`.`index`.

    mfG KaPtainCugel

    Danke das war das Problem.


Anmelden zum Antworten