none
Datenbank relativer connection string RRS feed

  • Frage

  • Meine Frage ist vielleicht banal, doch trotz intensiver Recherche, blicke ich irgendwie nicht durch.

    Ich habe eine SQLite Datenbank, welche ich per Dataset in mein Projekt eingebunden habe. Meine Projektmappe besteht aus 3 Projekten: Einer GUI, einer Businesslayer und einem Installer-Projekt.

    Die Datenbank befindet sich auf der Ebene des Businesslayers, jedoch nicht im bin/Release-Ordner, wo sich die .dll befindet, sondern auf Ebene der Projekt-Files.

    Nun wird mir bei der Datenbank-Anbindung jeweils ein absoluter Connection-String gesetzt. Diesen möchte ich gerne ändern auf einen relativen Pfad, was aber nicht gelingt.

    Der Installer kopiert ausserdem die Datenbank in die Ebene des .exe-Files auf dem Zielcomputer. Wie muss ich es anstellen, dass dort die Datenbank dann gefunden wird? Jedesmal vor dem kompilieren des Installer-Projektes den DB-Pfad in Businesslayer und GUI zu ändern und nachher manuell wieder zurück zu setzen finde ich ziemlich mühsam...

    Vielen Dank für Hinweise und Tipps im Voraus!

    Montag, 21. März 2011 13:31

Antworten

  • Hi,

    Die Datenbank befindet sich auf der Ebene des Businesslayers, jedoch nicht im bin/Release-Ordner, wo sich die .dll befindet, sondern auf Ebene der Projekt-Files.

    Der ConnectionString sollte eigentlich in die app.config. Den Pfad (wenn Du den im Dateisystem angeben willst), kannst Du bspw. auch als "{0}\Ordner\Abc.xyz" angeben und im Code den ConnectionString so vervollständigen:

      ConnectionString = String.Format( ConfigurationManager.AppSettings( "PfadZurDb" ), Application.StartupPath )

    Ich persönlich würde die Datenbank aber nicht im Programmverzeichnis ablegen, da Änderungen dort ggfs. fehlschlagen, weil der Benutzer kein Administrator ist. Dann lieber im Benutzerverzeichnis.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Code4132 Dienstag, 22. März 2011 09:48
    Montag, 21. März 2011 13:58
    Moderator

Alle Antworten

  • Hi,

    Die Datenbank befindet sich auf der Ebene des Businesslayers, jedoch nicht im bin/Release-Ordner, wo sich die .dll befindet, sondern auf Ebene der Projekt-Files.

    Der ConnectionString sollte eigentlich in die app.config. Den Pfad (wenn Du den im Dateisystem angeben willst), kannst Du bspw. auch als "{0}\Ordner\Abc.xyz" angeben und im Code den ConnectionString so vervollständigen:

      ConnectionString = String.Format( ConfigurationManager.AppSettings( "PfadZurDb" ), Application.StartupPath )

    Ich persönlich würde die Datenbank aber nicht im Programmverzeichnis ablegen, da Änderungen dort ggfs. fehlschlagen, weil der Benutzer kein Administrator ist. Dann lieber im Benutzerverzeichnis.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Code4132 Dienstag, 22. März 2011 09:48
    Montag, 21. März 2011 13:58
    Moderator
  • Vielen Dank für die Antwort und den Tipp mit dem Ablageort der Datenbank. Habe das gleich geändert. Nun habe ich allerdings noch ein Problem: Mein Dataset findet die DB nicht mehr. Ich habe den Pfad in den Projekteinstellungen geändert und sie wurden korrekt ins app.config übernommen. Weiter habe ich im Server-Explorer den Pfad für die DB angepasst. Dort klappt die Verbindung.

    Wo muss ich den Pfad für das Dataset anpassen?

    Edit: Nun habe ich den Pfad absolut gesetzt zum Ziel im Benutzerverzeichnis, und jetzt klappt es auch mit dem Dataset. Es scheint, dass das Dataset keine relativen Pfade akzeptiert????
    Montag, 21. März 2011 14:17
  • Hi,
    Edit: Nun habe ich den Pfad absolut gesetzt zum Ziel im Benutzerverzeichnis, und jetzt klappt es auch mit dem Dataset. Es scheint, dass das Dataset keine relativen Pfade akzeptiert????

    ich schrieb ja auch, dass Du den "relativen" Pfad vorher per Code in einen absoluten Pfad ändern musst. Per Designer geht das nicht.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 21. März 2011 14:41
    Moderator
  • Ich habe mich da auch gerade durchgekämpft :) Und habe das dann so gelöst:

     

      // Connectionsstring setzen
      cs = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\MyApp\\MyDB.mdf";
      myTableAdapter.Connection.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + cs + ";Integrated Security=True;Connect Timeout=30;User Instance=True";
    

     

    Die MyDB.mdf lege ich mit dem Setup Programm (also auf dem Anwender Rechner) ins entsprechende Verzeichnis, das ich natürlich vorher erstelle :)

    Bei mir ging es, wie man vielleicht sieht, um eine SQL Express Datei. Kann man dann vermutlich nicht 1zu1 übernehmen.

     

    Gruß Markus

     

     



    Dienstag, 22. März 2011 07:51