ODBC-Adapter mit falschem SQL-Statement erzeugt keine Exception



  • Hallo Experten,

    ich greife via ODBC auf eine Datenbank zu. Dieses klappt ohne Probleme. Wenn ich nun allerdings ein fehlerhaftes SQL-Statement nutze, dann bekomme ich zwar beim Debuggen (wenn ich die CLR-Exceptions in VC++2008 Express aktiviert habe) die Rückmeldung des ODBC-Treibers (z.B. Spalte fehlerhaft), bekomme aber im Programm über den TRY/CATCH-Block keine Exception. Das Programm bleibt daher leider einfach stehen ....

    Wer hat eine Idee, was ich tun muss, um die Exception zu erhalten ?? Vielen Dank im Voraus.

    String ^ZUGANG;
    OdbcConnection ^VERBINDUN G;
    ZUGANG = "DSN=DSN;UID=USER;PWD=DEMO;";
    VERBINDUNG = gcnew OdbcConnection (ZUGANG);
    VERBINDUNG->Open();

    DataSet ^ds;
    OdbcDataAdapter ^adapter;
    String ^connectionString = "SELECT FELD FROM TABELLE WHERE ZAHL=A";

    try
    {
    ds = gcnew DataSet();
    adapter = gcnew OdbcDataAdapter(connectionString ,VERBINDUNG);
    ds->Tables->Add("TABLE");
    adapter->Fill(ds,"TABLE"); //<----- FEHLERZEILE
    DataRow ^dr = ds->Tables["TABLE"]->Rows[0];
    }
    catch (Exception ^E) {}



  • Moin,

    ganz schlecht

    catch (Exception ^E) {}
    

    immer die Exception ausgeben lassen

    catch(Exception ^e) { Console::WriteLine(e->Message); }
    

    dann dürfte Dir Dein Programm zumindest eine Fehlermeldung geben und Dir damit sagen was schief läuft

    hand, mogel



  • Und ich würde das öffnen der DB auch in den try-Block reinehmen, sonst schmiert Dir das Programm ab wenn die DB nicht ordentlich geöffnet werden kann...

    LG Solick



  • Vielen Dank für den Tipp, aber leider komme ich ja gar nicht so weit, dass eine Exception erzeugt wird....

    Beim Debuggen erhalte ich folgende Meldung:

    Eine Ausnahme (erste Chance) des Typs "System.Data.Odbc.OdbcException" ist in System.Data.dll aufgetreten.

    Zusätzliche Informationen: ERROR [42S22] [NORD-INFORMATIK][Server]Spalte nicht gefunden A

    Leider führt die o.g. Exception nicht dazu, dass das Programm in den CATCH-Block springt ...



  • Fang mal zusätzlich eine OdbcException ab...

    catch(OdbcException ^e)
    {
    Console::WriteLine(e->Message);
    }
    
    catch(Exception ^e)
    {
    Console::WriteLine(e->Message);
    }
    


  • Habe ich leider auch schon probiert ...

    Hat auch nicht geholfen ...


Anmelden zum Antworten