Connection-String zu Oracle-Datenbank

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Duke.

    Connection-String zu Oracle-Datenbank

    Hallo,

    ich möchte per VB.Net und System.Data.Odbc-Treiber eine Oracle-Datenbank auslesen was im Grunde auch gut klappt. Nur leider fehlen die deutschen Umlaute und Sonderzeichen (? statt ß, o statt ö, ...)
    Laut Oracel-DB-Homepage läuft die Datenabnk auf WE8MSWIN1252.

    Kann mir jemand sagen, wie ich an meine Umlaute komme?
    Hallo @Gloem!
    Connection-String zu Oracle-Datenbank
    und

    Gloem schrieb:

    wie ich an meine Umlaute komme?
    haben doch an sich ned wirklich was mit einander zu tun. Der ConnectionString ist der "Befehlssatz", mit dem du dich an der DB anmeldest. Was dein Problem betrifft, wird es sich um das Encoding handeln.

    Könntest du eventuell ein Code-Snippet posten und einen kleinen Auszug aus den ausgelesenen Daten (welche im Normalfall die Sonderzeichen enthalten würden), damit wir sehen was du mir "fehlen" meinst.

    Oder du versuchst es mal mit dem hier: connectionstrings.com/mysql-co…specifying-character-set/
    Hier einfach im ConnectionString das Schlüsselwort charset und den Wert UTF-8 angeben. (Im Link ist nur ein MySQL-Beispiel, musst mal nach Oracle suchen)
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Das mit dem charset meinte ich. Ich hatte gehofft, dass es da noch mehr Parameter gibt.

    Mein ConnectionString wird aus einer Konfigurationsdatei eingelesen:

    Quellcode

    1. ' Einlesen des ODBC-ConnectionString
    2. Dim odbcConnectionString As String = readDBConnectionString()
    3. If (odbcConnectionString = Nothing) Then
    4. ' Beenden des Programmes
    5. Exit Sub
    6. ElseIf (odbcConnectionString = "") Then
    7. writeErrorMessage("Es konnten keine Verbindungsdaten zur Datenbank eingelesen werden")
    8. ' Beenden des Programmes
    9. Exit Sub
    10. End If


    Funktionsaufruf:

    Quellcode

    1. ' Einlesen der Verbindungsparameter
    2. Do While Not fileReader.EndOfStream
    3. ' Erhöhen des Zeilenzählers
    4. zeileNr += 1
    5. ' Einlesen der Quellzeile
    6. zeile = fileReader.ReadLine
    7. ' Wenn es eine Kommentarzeile ist
    8. If (zeile.Chars(0) = "'") Then
    9. ' Zur nächsten Zeile
    10. Continue Do
    11. ' Wenn der nächste Abschnitt in der Datei erreicht ist
    12. ElseIf zeile = "# DB-Konfigurationsdaten" Then
    13. 'Beenden der Schleife
    14. Exit Do
    15. Else
    16. ' Hinzufügen der aktuellen Zeilen (Evtl. inkl. eines Separators)
    17. odbcConnectionString &= IIf(odbcConnectionString.Length > 0, ";", "") & zeile
    18. End If
    19. Loop


    Konfigurationsdatei:

    Quellcode

    1. # ODBC-Verbindungsparameter
    2. '
    3. ' DSN - Datenquelle wie in Oracle ODBC Driver Configuration auf Client-Rechner angegeben
    4. DSN=xxx
    5. ' SERVER - TNS Server Name wie in Oracle ODBC Driver Configuration angegeben
    6. SERVER=win2:1521/xe
    7. ' UID - Oracle Server Benutzername
    8. UID=yyy_neu2
    9. ' PWD - Passwort für den Benutzername
    10. PWD=zzz


    Folgender Quelltext sollte Sonderzeichen erzeugen:

    Quellcode

    1. ' Anlegen eines Objektes zur Verbindung zur Datenbank
    2. Dim odbcConnection As OdbcConnection = New OdbcConnection(odbcConnectionString)
    3. ' Anlegen eines Zählers
    4. Dim counter As Long = 0
    5. Try
    6. ' Herstellen der Verbindung zur Datenbank
    7. odbcConnection.Open()
    8. System.Console.WriteLine("Verbindung zur Datenbank hergestellt...")
    9. System.Console.WriteLine()
    10. System.Console.WriteLine("Benötigte Daten werden eingelesen...")
    11. System.Console.WriteLine(" Lookup-Tabellen")
    12. ....
    13. ' Straßen sind doppelt in der DB vorhanden, einmal in Projekt 1 und einmal in Projekt 2
    14. odbcCommand.CommandText = "SELECT * FROM ST WHERE PROJEKT = '1'"
    15. Dim odbcReader As OdbcDataReader = odbcCommand.ExecuteReader()
    16. counter = 0
    17. ' Solange Einträge in der Datenbank gefunden wurden
    18. While (odbcReader.Read)
    19. If Not dic_St.ContainsKey(odbcReader(TAB_ST_STRNR).ToString.Trim) Then
    20. dic_St.Add(odbcReader(TAB_ST_STRNR).ToString.Trim, IIf(IsDBNull(odbcReader(TAB_ST_STRNAME)), "", odbcReader(TAB_ST_STRNAME).ToString.Trim)) '.Replace("?", "ß")))
    21. System.Console.WriteLine(odbcReader(TAB_ST_STRNAME).ToString.Trim)
    22. counter += 1
    23. Else
    24. writeErrorMessage("Doppelter Schlüssel in der St-Tabelle gefunden: ")
    25. ' Beenden der Funktion > Rückgabe false
    26. Return False
    27. End If
    28. End While
    29. System.Console.WriteLine(" " & counter & " St-Objekte eingelesen")
    30. ' Schließen des ODBCReaders
    31. odbcReader.Close()
    Die ersten Funktionen und die Konfigurationsdatei ist lediglich zum Zusammenbauen des Connectionsstrings nötig

    Im Grunde ist im ConnectionString nichts besonderes (UID, Server, PWD, ...) drin. Ich habe es mit den charset UTF-8 versucht wie auch WE8MSWIN1252

    Folgender zusammengefasster Code gibt z.B. Straßennamen mit ? statt ß und aou statt äöü aus

    VB.NET-Quellcode

    1. Dim odbcConnection As OdbcConnection = New OdbcConnection(odbcConnectionString)
    2. Try
    3. odbcConnection.Open()
    4. Dim odbcReader As OdbcDataReader = odbcCommand.ExecuteReader()
    5. While (odbcReader.Read)
    6. System.Console.WriteLine(odbcReader(TAB_ST_STRNAME).ToString.Trim)
    7. End While
    8. ' Schließen des ODBCReaders
    9. odbcReader.Close()