Announcement

Collapse
No announcement yet.

Oracle Verbindung mit Access und/oder VB.Net

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Oracle Verbindung mit Access und/oder VB.Net

    Hallo zusammen

    aufgrund eines bisher nich gelösten Problems von mir habe ich dieses Forum gefunden und würde mich freuen, wenn ihr mir weiterhelfen könnt.

    Bisher habe ich Tools mit Access und VBA erstellt. Fornt- und Backend. Da es hier aber einige Supportprobleme gab, möchte ich gerne die Daten auf eine "richtige" Datenbank unterbringen.

    Nun habe ich in einer Firma (Netzwerkwer, mehere PCs) einen zweiten PC zur Verfügung gestellt bekommen und habe dort u.a. MySQL und Oracle XE installiert.

    Zu MySQl habe ich mittlerweile die Verbindung über das Netzwerk zu Access bzw. VB.Net erstellt und es funktioniert. Ein Bekannter sagte zu mir, das ich aber lieber mit Oracle arbeiten sollte. Nun habe ich Orcale installiert auf den zweitrechner.

    Auf den Erstrechner kann ich via cmd auch tnsping P0038441 eingeben und erhalte die Informationen: Adapter HOSTNAME zur Auflistung des Alias benutzt Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SID=*)(SERVICE_NAME=P0 038441)) (ADRESS=(PROTOCOL=TCP)(HOST=P0038441)(PORT=1521)))

    Das heißt er findet den Host ja. Wenn ich nun aber in Access oder VB.Net versuche die Verbdindung aufzubauen...

    VB.NET
    DataSource=Oracle Database
    DataProvider=.NET Framework Data Provider for OLE DB / .NET Framework Data Provider for ORACLE
    ServerName= P0038441
    UserName=System (zum testen der Verbindung ersteinmal)
    Password=********

    Dann die TestConnection auswähle, erhalte ich folgende Fehlermeldung: ORA-12514: TNS:Listener konnte in verbindungskriptor angegebenen SERVICE_NAME nicht auflösen.

    Was habe ich falsch gemacht, muß ich noch irgendwo anders was einstellen?

    Wie gesagt auf den Erstrechner kann ich den Zweitrechner über tnsping erreichen, aber keine Verbindung in VB.Net aufbauen.

    Hoffe einer von euch kann mir weiterhelfen.

    LG Marja

  • #2
    Use oracle .net provider

    Hallo,

    benutze den ORALE .net provider.

    Connection string:

    http://connectionstrings.com/oracle#p12

    mfg

    BD

    Comment


    • #3
      ersteinmal vielen Dank für den Link.

      Da schaue ich mal wie ich das wieder umsetzen kann. War schon ne Weile aus VB.Net raus, hatte ja mehr mit Access gearbeitet und da war es dann einfach zu sagen, verknüpfe mit Tabelle so und so.

      Über die Connect to Database bekomme ich das so nicht hin? Ich muß das via Code verbinden die Datenbank?

      LG Marja

      Comment


      • #4
        Hi,

        aus dem Code ist das doch rechte einfach:

        Code:
        Imports System.Data.OracleClient
        
        ' ...
        
        
        Dim con as OracleConnection
        Dim csb as New OracleConnectionStringBuilder
        
        csb.DataSource = "dein Datasource"
        csb.UserId = "dein Benutzername"
        csb.Password = "dein Passwort"
        
        con = new OracleConnection(csb.ConnectionString)
        con.Open()
        Gruß

        JenneB

        Comment


        • #5
          Hallo,

          ist die Remoteverbindung auch erlaubt ? Einloggen als "sys", Administration, Manage HTTP Access. Und auf der Oracleseite findet sich auch weiterführendes Material (z.B.) : http://www.oracle.com/technology/pub...cook-vs08.html
          MfG
          Cheat-Sheets for Developers / Programming Quotes

          Comment


          • #6
            vielen Dank für eure Antworten.

            Ich bin nicht so fit in Verbindung mit Datenbanken über das Netzwerk. Wie erwähnt habe ich bisher mit Access und VBA gearbeitet, diese Anwendung dann für die User in Front- und Backend erstellt. Nebenher habe ich vor ca. 2 Jahren ein VB.Net Fernkurs gemacht.

            so, ich habe mir den Link angeschaut und muß sagen, danke. Jetzt funktioniert es, ohne zusätzlichen Treiber oder sonst, einfach die Reference auswählen und es passt.

            Nun meine Frage, da ich sonst mit verknüpften Tabellen in Access gearbeitet habe.
            Die Verbindung öffne ich beim Toolstart und schließe sie beim Tool beenden. Dazwischen kann ich jedezeit auf die entsprechenden Tabellen etc. zugreifen?

            LG Marja
            Zuletzt editiert von marja; 24.02.2010, 12:30.

            Comment


            • #7
              vielen Dank für eure Antworten.

              Ich bin nicht so fit in Verbindung mit Datenbanken über das Netzwerk. Wie erwähnt habe ich bisher mit Access und VBA gearbeitet, diese Anwendung dann für die User in Front- und Backend erstellt. Nebenher habe ich vor ca. 2 Jahren ein VB.Net Fernkurs gemacht.

              so, ich habe mir den Link angeschaut und muß sagen, danke. Jetzt funktioniert es, ohne zusätzlichen Treiber oder sonst, einfach die Reference auswählen und es passt.

              Nun meine Frage, da ich sonst mit verknüpften Tabellen in Access gearbeitet habe.
              Die Verbindung öffne ich beim Toolstart und schließe sie beim Tool beenden. Dazwischen kann ich jedezeit auf die entsprechenden Tabellen etc. zugreifen?

              Verwendeter Code:

              D.h. ich habe die bereits hinterlegte Referens genutzt und auf einige Clients gleich probiert und es funktioniert. Gibt es den einen Unterschied zwischen Imports System.Data.OracleClient und Imports Oracle.DataAccess.Client ?

              Nur halt meine Frage, wo der Unterschied ist, nicht das es irgendwann nicht mehr funktioniert?!

              Imports System.Data.OracleClient

              Public Class Form1
              ' ...
              'Oracle Server Adresse setzen
              Private Const oradb As String = "Data Source = (DESCRIPTION =" _
              + "(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = P0038441) (PORT = 1521)))" _
              + "(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE )));" _
              + "User ID = Anw_aktiv; Password = aktiv;"

              Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
              Dim conn As New OracleConnection(oradb)
              Dim cmd As New OracleCommand


              Try
              conn.Open()
              cmd.Connection = conn
              cmd.CommandText = "select MaVNam from MaStamm where MaID=123456"
              cmd.CommandType = CommandType.Text
              Dim dr As OracleDataReader = cmd.ExecuteReader()

              If dr.Read() Then
              Label1.Text = dr.Item("MaVNam") ' or use dr.Item(0)
              End If
              Catch ex As Exception ' catches any error
              MessageBox.Show(ex.Message.ToString())
              Finally
              ' In a real application, put cleanup code here.
              End Try

              conn.Close() ' Visual Basic
              conn.Dispose() ' Visual Basic

              End Sub
              End Class
              LG Marja
              Zuletzt editiert von marja; 24.02.2010, 12:50.

              Comment


              • #8
                Hallo,
                Gibt es den einen Unterschied zwischen Imports System.Data.OracleClient und Imports Oracle.DataAccess.Client ?
                Die Archivsuche im .NET Forum müsste ergeben, dass der Oracletreiber die bessere Wahl ist, z.B. http://entwickler-forum.de/showthread.php?t=60008
                MfG
                Cheat-Sheets for Developers / Programming Quotes

                Comment


                • #9
                  danke dir für den Link.

                  Hmm, scheinbar gibt es hier im Unternehmen wie erwähnt noch mehr Oracle Datenbanken, daher dachte ich das der entsprechende Oracle Treiber auf jedem Client installiert ist. War aber nicht. Nun habe ich mir von Oracle den entsprechenden Treiber heruntergeladen. Diesen habe ich in meinem Projekt auch referenziert. Und es funktioniert mit dem direkten Treiber von Oracle. Nun habe ich die Exe Datei auf einen anderen Client probiert und hier erfolgt nun der Fehler, das er die entsprechende DLL Datei nicht findet, daher meine neue Frage.

                  Wir haben hier im Unternehmen eine Software-Verteilung, weiß aber trotz vorhandener Oracle Datenbanken nicht ob auch dieser Treiber zum ausrollen zur Verfügung steht.

                  Habe ich irgendwie die Möglichkeit in meinem Projekt die entsprechende DLL Datei zu packen, das beim ausführen des Programms auf die DLL Datei zugegriffen werden kann?

                  Habe im Netz zwar schon ne Anleitung gefunden, das man ...

                  oci.dll
                  orannzsbb11.dll
                  oraocci.dll
                  oraociei.dll

                  in das Projekt einfügen kann und dann Publishen.

                  Allerdings gibt es da zwei Probleme, eine der DLL Dateien ist ca. 107 MB groß und die Anwendung installieren möchte ich nicht. Kann ic in dem Programm irgendwie den Verweis auf ein Serverlaufwerk legen wo die DLL datei liegen, so bleiben die auf dem Server Laufwerk und müßen nicht mit kopiert werden und auf jeden Client läuft die Anwendung.

                  Bei Access habe ich es immer so gehandhabt das ich die MDB in eine MDE konvertiert habe und die dann per Batch auf den entsprechenden Client beim Aufruf des Link zur Batch kopiert und nach Ende der Anwendung gelöscht wurde.


                  Da ich mich noch nicht bis zu 100% mit VB.Net auskenne wollte ich am Anfang nur die erstellte Exe Datei verteilen für den Programmstart, da ich von dem sonstigen Publish noch nicht soviel Anhnung habe.

                  Ich hoffe auch bei der Antwort könnt ihr mir weiterhelfen.

                  Marja
                  Zuletzt editiert von marja; 25.02.2010, 10:07.

                  Comment


                  • #10
                    Hallo zusammen

                    nun habe ich ein neues Problem. Aufgrund einer anderen Frage in einem anderen bereich hier im Forum, wurde mir nahegelegt die Verbindung nicht immer geöffnet zu halten. Allerdings dauert das öffnen einer Oracle Verbindung bis zu 25sek. das ist ein wenig lang. Ich habe es paralell mit MySQL probiert, da stand die Verbindung nach weniger als 1sek.

                    Per tnsping erreiche ich den Oracle Rechner nach 30ms bis 80ms (hatte den Ping mehrfach probiert). Kann ich irgendwas noch irgendwo optimieren. Wie kommt es das es per tnsping schneller geht als direkt über vb.net. Das ist definitiv zu lange. Was kann ich ändern?

                    habe es nun auch mal per sqlplus versucht, da dauert die anmeldung auch ein paar sekunden, woran könnte es liegen?

                    Wenn ich natürlich die Verbindung offen halte, dann gehen die Abfrage sehr schnell. Es ist halt die Frage, kann ich die Verbindung offen lassen, wenn das Tool bei dem entsprechenden user offen ist?
                    Ich frage bzgl. Performance.

                    LG marja
                    Zuletzt editiert von marja; 02.03.2010, 15:25.

                    Comment

                    Working...
                    X