(vb) Abfrage auf Oracle bricht ab

deusfalsus

Erfahrenes Mitglied
Hallo,

ich verbinde mich mittels DSN mit einer Oracle DB. Die Abfrage klappt, wenn ich im Debugmodus schrittweise vorgehe eigentlich immer.
Starte ich normal, kommt meistens, aber auch nicht immer, die Fehlermeldung "ERROR [HYT00] [Oracle][ODBC][Ora]ORA-01013: Benutzer veranlaßte Abbruch des laufenden Vorganges"

Hier mein Code
Visual Basic:
Dim conn As Odbc.OdbcConnection
        Dim da As Odbc.OdbcDataAdapter
        Dim ds As Data.DataSet
        Dim sql As String

        Dim sConnString As String = _
            "DSN=bts_prod_db92;" & _
            "Uid=xxx;" & _
            "Pwd=xxx"

        Try
            conn = New Odbc.OdbcConnection(sConnString)

            conn.Open()
            sql = "SELECT ...;"

            da = New Odbc.OdbcDataAdapter(sql, conn)
            ds = New DataSet()
           
            da.Fill(ds)
            frmMain.grdKonserven.DataSource = ds.Tables(0)

            'conn.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

Wo liegt mein Fehler? Was kann ich tun?
Ich habe versucht, den "ConnectionTimeout" manuell hochzusetzen, aber das geht irgendwie nicht. Zumindest hat im ConnectionString und über conn.ConnectionTimeout=... nicht geklappt.

Danke schonmal an alle, die sich die Mühe machen.
 
Ich hab jetzt die Abfrage in einen Thread gepackt:
Visual Basic:
Friend ThreadDatenAusBTSLesen As New Threading.Thread(AddressOf verfProd_aus_BTS_einlesen)
Beim Start starte ich diesen
Visual Basic:
Me.Hide()
        frmLade.Show()
        frmLade.Refresh()
        ThreadDatenAusBTSLesen.Start()
        While ThreadDatenAusBTSLesen.IsAlive
            Application.DoEvents()
        End While
        frmLade.Close()
        Me.Show()
An sich klappt das. Aber jetzt werden die Abfrageergebnise nicht mehr in mein Grid übertragen. (Code aus Prozedur im Thread)
Visual Basic:
frmMain.grdKonserven.DataSource = ds.Tables(0)

Da Problem mit dem Abbruch taucht immernoch auf, aber wie mir scheint seltener.
 
  1. Was schreibt Oracle zum Fehler ORA-01013?
  2. Von einem Thread kannst du nicht so einfach Daten in den Hauptthread übernehmen. Dazu musst du Invoke verwenden.
 
Da die Oracle-DB der Meinung ist, es wäre ein Nutzerabbruch und mir entsprechend Meldung gibt, siehts wohl so aus, als wäre für die DB faktisch kein Fehler passiert.
Ich weiß auch nicht, wie und wo mir Oracle da was sagen soll. Ich bekomme ja eine Meldung, die mir sagt, welcher Meinung der OracleServer ist.
Die Frage ist, warum es dazu kommt und wie ich es verhindern kann.
 
Es könnte aber dabei sein, dass beim entsprechenden Knowledge Base Eintrag ein paar unterschiedliche Gründe drinnen stehen, wann genau diese Meldung zurück geliefert wird. Anhand dessen kann man eventuell auch den wirklichen Fehler kommen.
 
Diesen Punkt hat er ja schon verfolgt.

Ein Möglichkeit: Die Anweisung manuell ausführen. Funktioniert sie? Wenn ja, dann kann es wirklich nur am Timeout liegen.
 
Oh, übersehen :-(
Ich habe versucht, den "ConnectionTimeout" manuell hochzusetzen, aber das geht irgendwie nicht. Zumindest hat im ConnectionString und über conn.ConnectionTimeout=... nicht geklappt.

Du setzt das ConnectionTimeout. Dies ist jedoch nur für das Herstellen der Verbindung. Um das Timeout für die Abfrage zu setzen. Musst du dem Konstruktor für den DataAdapter eine OdbcDataAdapter-Instanz übergeben. Bei dieser kannst du auch das CommandTimeout setzen.
 
Hast du dir die anderen Konstruktoren mal angeschaut?
Bei der Variante mit dem OdbcCommand als Argument gibts ein Beispiel ;)
 
Zurück