Zugriff auf Oracle-Datenbank

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Zugriff auf Oracle-Datenbank

    Moin!

    ich möchte via ADO auf eine Oracle-Datenbank zugreifen.

    Im Grunde funktioniert das schon mit

    VB.NET-Quellcode

    1. Public Sub Main()
    2. Dim connectionString As String = "Data Source=ThisOracleServer;Integrated Security=yes;"
    3. Dim queryString As String = "SELECT CUSTOMER_ID, NAME FROM DEMO.CUSTOMER"
    4. Using connection As OracleConnection = New OracleConnection(connectionString)
    5. Dim command As OracleCommand = connection.CreateCommand()
    6. command.CommandText = queryString
    7. Try
    8. connection.Open()
    9. Dim reader As OracleDataReader = command.ExecuteReader()
    10. While reader.Read()
    11. Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", reader(0), reader(1))
    12. End While
    13. reader.Close()
    14. Catch ex As Exception
    15. Console.WriteLine(ex.Message)
    16. End Try
    17. End Using
    18. End Sub


    Zwei Dinge in diesem Zusammenhang.

    Ich vermisse irgendwie auf die Anzahl der gefundenen Datensätze zuzugreifen und es wird mir OracleConnection sowie OracleCommand als veraltet angemerkt.

    Kann mir einer weiterhelfen?

    Gruß Jan
    Hallo jan99,

    dieses Problem hatte ich auch, als ich auf VB.NEt umgestiegen bin. Es gibt aber nichts, was sich nicht löschen lässt.

    Fangen wir mal mit Deiner zweiten Frage an:
    Die Meldung, dass Du eine veraltete Version des OracleClient verwendest kannst Du ganz schnell beheben. Rufe in Visual Studio den NuGet - Manager auf suche nach "Oracle.ManagedDataAccess". Lade das Paket und schon hast Du den aktuellsten Treiber in der Version 12.2.1100.

    Die erste Frage habe ich wie folgt bearbeitet ...

    VB.NET-Quellcode

    1. ...
    2. DIM TD as NEW Data.DataTable
    3. DIM Reader AS OracleDataReader
    4. DIM DTCount AS Integer
    5. ...
    6. Reader = SQLCMD.ExceuteReader ' SQLCMD enthält den SQL String
    7. DT.Load(Reader)
    8. DTCount = DT.Rows.Count


    Ich weiß nicht, ob es für die Zählung eine bessere Methode gibt (wenn ja, wäre ich dankbar für einen Hinweis :rolleyes: ), funktioniert aber so ganz super ...

    Ich hoffe, ich konnte Dir helfen ...

    Gruß vom Doc
    Hallo

    Nachtrag zu der super Antwort von @DrZwockel:
    Solle es NUR um das zählen gehen dann eher mit z.b. folgender Abfrage select count(*) from my_table
    Das spart enorm viel Zeit und Traffic.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo NoFear23m,

    vielen Dank für Deine Antwort. Im Prinzip hast Du recht, allerdings würde ich damit die Gesamtzahl innerhalb der Tabelle abfragen.

    Nofear23m schrieb:

    Solle es NUR um das zählen gehen dann eher mit z.b. folgender Abfrage select count(*) from my_table
    Das spart enorm viel Zeit und Traffic.


    Ich wollte aber nur die in der tatsächlichen Abfrage gelieferten Datensätze zählen ...
    Trotzdem Danke für den Hinweis :thumbup:

    Gruß vom Doc
    Ja, schon klar.
    Dann müssen hald die Bedingungen da mit rein:

    Beispiel:

    SQL-Abfrage

    1. SELECT name, velocity, COUNT(*) AS count,
    2. COUNT(CASE WHEN category = 'A' AND id = 1 THEN 1 END)
    3. FROM section
    4. GROUP BY name, velocity


    Was DU da versucht ist eine klare Performancebremse und kann dir in einem Produktivsystem enorme Probleme bringen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo NoFear23m,

    vielen Dank für Deinen Tipp ... ich hatte ja geschrieben, dass ich dankbar bin für jeden Tipp, wenn es einfacher und schneller geht.

    Allerdings verstehe ich gerade Deinen SQL String nicht so ganz. Könntest Du ihn mir etwas mehr erläutern (Kommentar daneben). Würde es gerne übernehmen :rolleyes: .

    Danke schon mal vorab

    Gruß vom Doc
    Hallo

    DrZwockel schrieb:

    Könntest Du ihn mir etwas mehr erläutern (Kommentar daneben). Würde es gerne übernehmen .


    Bin leider nicht Oracle-Fit. Areite nur mit MS SQL.

    Aber hier gibts ne Erläuterung. Soweit ich das sehe kann man das Count um ein Select herum schreiben.

    Ich hoffe das hilft dir. Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Moin!

    ich krame dieses Posting nochmal hervor, weil noch eine Frage sich ergeben hat.

    Es geht um die Wert für Reader, wie zum Beispiel

    VB.NET-Quellcode

    1. While reader.Read()
    2. Dim Text as String = reader(0)
    3. End While


    Wie fange ich aber ab, wenn der Wert, den "reader(0)" abfragt DBNull ist?

    Dieses führt ansonsten unweigerlich zu einem Fehler!

    Gruß Jan