OLEDB zugriff auf Access oder SQL (je nach Standort)

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Schamash.

    OLEDB zugriff auf Access oder SQL (je nach Standort)

    Hallo zusammen,

    ich bin gerade am Verzweifeln.
    Ich habe ein altes Projekt geerbt und muss es jetzt umbauen.
    Im original Projekt wird per OLEDB auf eine AccessDB zugegriffen. Es gibt kein DataSet die zugriffe erfolgen wenn sie Benötigt weden (Select -> Datatable)

    Jetzt soll ich das Programm so umbauen das es in verschiedenen Standorten verwendet werden kann. In einigen Standorten soll Access und in andern SQL verwendet werden. Da Systeme (Laptops) zwischen verscheidenen Standorten wechseln, soll das Tool beide zugänge untesrtützen

    Auf die Access Datenbank wird so zugegriffen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim builder As New OleDbConnectionStringBuilder()
    2. builder.Add("Data Source", LokalDBPfad)
    3. builder.Add("Provider", "Microsoft.Jet.Oledb.4.0")
    4. builder.Add("Jet OLEDB:Database Password", "GeheimesPasswort")
    5. Return builder.ConnectionString


    Ich versuche per OLEDB auch auf MySQL zuzugreifen damit ich nicht die gefühlt 1000 Datenbankzugiffe neu machen muss

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim builder As New OleDbConnectionStringBuilder()
    2. builder.Add("Server", "127.0.0.1")
    3. builder.Add("provider", "MySQL Provider") '<-- MySQLPro , MySql Data Provider, MSSQLPROV versucht
    4. builder.Add("Database", "attest")
    5. builder.Add("Uid", "MyUser")
    6. builder.Add("Pwd", "GeheimesPasswort")
    7. Return builder.ConnectionString


    Allerdings bekomme ich immer die Fehlermeldung Der 'MySQL Data Provider'-Provider ist nicht auf dem lokalen Computer registriert.
    Ich habe im Netz verscheidene Tips gefunden ... meistens mit dem Resultat das ich die MySQLConnection nutzen soll.

    Danke schon mal an alle die es versuchen.
    Wenn ich Informationen vergessen habe einzustellen einfach anfragen, ich liefere nach :)


    P.S.
    Da sich alles ausschließlich in einem gesicherten lokalen Netz abspielt kann ich die Passwörter im Code hinterlegen, Sie dienen nur dazu das man nicht ausversehen die Datenbank (vorallem die accessDB) verändert.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Schamash“ ()

    dein gezeigter Code ist kein Zugriff auf eine DB, sondern ist nur das Zusammenbauen eines Connectionstrings.
    Jo, und um mit OleDb auf eine MySqlDb zuzugreifen taugt der wohl nicht. Ich weiß aber auch nicht die richtige Syntax dafür, und ob das ühaupt geht.

    Hat irgendjemand mal verlauten lassen, solch ginge?
    @ErfinderDesRades
    Angeblich ist das möglich. Leider finde ich keine Beispiele sondern immer nur Beiträge wo beschrieben steht "geht nicht bei AnyCPU nach umstellen auf x86 läuft alles"

    Hier ein Beispiel des Zugriffs, darin ist meine Problematik vergraben. Wenn es nicht möglich ist mit Oledb auf SQL zuzugreifen muss ich beim Starten das Programms eine Prüfung einbauen und dann jeden zugriff doppelt schreiben einmal für Access und einmal für SQL ... das hoffe ich verhindern zu können.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Using Command As New OleDb.OleDbCommand
    2. Command.Connection = DBConnection
    3. Command.CommandText = "SELECT Wert FROM Konfiguration WHERE Bezeichnung = @bezeichnung"
    4. Command.Parameters.Add("@bezeichnung", OleDb.OleDbType.BSTR).Value = Bezeichnung
    5. If DBConnection.State = ConnectionState.Closed Then DBConnection.Open()
    6. Dim da As New OleDb.OleDbDataAdapter(Command)
    7. da.Fill(dt)
    8. DBConnection.Close()
    9. End Using
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Was ich Auf Wiki fund, lässt mich vermuten, dasses mit ODBC gehen könnte.
    Immerhin habich schon Access-Dbs mit ODBC abrufen können - aber lange her.

    Prinziepeiell kann man das alles auch mit den abstrakten Basisklassen abhandeln. Dann kann man das ganze System an einer einzigen DbFactory aufhängen, die alle Objekte generiert.
    Gibst diu eine OleDbFactory hinein, sind alle Objekte OleDb-Objekte, gib eine MySqlDbFactory an, so kriegst du lauter MySql-Objekte.
    allgemeine Zugriffs-Lösung für: MySql, Access, SqlCe, SqlServer, DatasetOnly arbeitet nach dem Prinzip.
    @MichaHo Und mit der MySQL Lib kann ich per OLEDB auf meien MySQL Datenbank zugreifen?

    @ErfinderDesRades Ich will schon lange das Prgramm neu Aufhängen, leider habe ich nur eine sehr kurze Zeitspanne (bis Freitag). Was meinst du mit abstrackten Basisklassen. Ich glaube da stehe ich gerade auf dem Schlauch.
    Ich brauch OleDb Objekte, bekomme vom SQL aber nur MySQL oder (ungetestet) vielleicht noch ODB Objekte. Wie kann ich die in OleDb-Objekte umwandeln?


    Ich habe meine Cheffin auf die 2von3 Regel hingewiesen (gut, schnell, günstig -> Es gibt nur 2 der 3 gleichzeitig) ... Es wurde sich für schnell und günstig entschieden. Also muss ich was zusammenpfuschen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Google mal nach
    mysqlprov 3.0 download

    vll findest was bei SourceForge oder so. Du hast mit Sicherheit den Treiber nicht, daher geht es nicht. Offiziell gibt es nix von MySQL für OleDB und die inoffiziellen alten Dinger die man noch vll iwo findet sind auch verbuggt.
    Ich würde dir definitiv zu ODBC raten (würde für Access auch gehen) oder eben MySql für .NET. Aber vll hast ja Glück mit dem OleDB Treiber, falls du einen findest ;)
    Das ist meine Signatur und sie wird wunderbar sein!
    Ich danke dir! Stand echt voll auf dem Schlauch.
    System.Data.Common.DbCommand

    @Mono Den MySQLProv hab ich ausprobiert, der warf aber nur undeffinierte Fehlermeldungen, da der auch seit 2006 nicht mehr gepflegt wird könnte das auch mit der MySQL version zusammenhängen ...

    Ich hab mich jetzt (aus Zeitgründen) erst einmal für eine ganz andere Lösung entschieden.
    Ich mache 2 seperate Toolz, eins mit OLEDB und ein mit MySQL.
    Und dann nerve ich meinen Cheff solange bis die Access-Standorte auch zugriff auf den SQL bekommen :evil:
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."