SQL Datenbank Verbindungsproblem

  • geschlossen
  • C#

  • geronimo345
  • 2931 Aufrufe 14 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SQL Datenbank Verbindungsproblem

    Hallo Alle zusammen,

    ich habe bereits die SuFU genutzt und nichts gefunden, deswegen hier mein Problem/ meine Frage:

    Ich habe vor in einem Programm mich mit einer SQL Datenbank zu verbinden, in einem Fenster, wenn ein button geklickt wird.
    Ich möchte aber, dass der Anwender sich immer mit der Datenbank Datei vom Desktop des Benutzers verbindet.
    (Man geht davon aus, dass die Datenbakn-Datei sich auf dem Desktop befindet)

    Da sich aber je nach Anwender der Benutzername und somit der Pfad zum Desktop ändert, benötige ich einen Code, der mir ermöglicht, dass sich der Anwender mit der Datenbank auf seinem Desktop verbindet.

    Der Verbindungsstring sieht ja gewöhnlich so aus:

    Quellcode

    1. const string verbindungsstr = "Data Source=.\\SQLEXPRESS;AttachDBFilename=C:\\Benutzer\\Name\\Desktop\\Datenbank.mdf;Integrated Security = true;Connect Timeout=30;User Instance=True";
    2. SqlConnection sqlc = new SqlConnection(verbindungsstr);
    3. sqlc.Open();


    Ich habe schon versucht das irgendwie mit

    Quellcode

    1. System.Environment.SpecialFolder.Desktop.ToString()

    hinzubekommen, aber ich habs so nicht geschafft...

    Vielleicht kann mir jemand weiterhelfen?

    mfg
    geronimo345
  • System.Environment.SpecialFolder ist nur eine Enum die die möglichen special-folders beschreibt.

    Damit solltest du den pfad bekommen: (Environment.GetFolderPath Method (Environment.SpecialFolder) (System))

    Quellcode

    1. Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));


    Gruß Zerd
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • Ungetestet würde ich so vermuten:

    PHP-Quellcode

    1. string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
    2. const string verbindungsstr = "Data Source=.\\SQLEXPRESS;AttachDBFilename=" + desktopPath + "Datenbank.mdf;Integrated Security = true;Connect Timeout=30;User Instance=True";
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • hehe...
    Vielen Dank Zerd, aber auf die Idee bin ich auch schon gekommen :).
    Das geht leider nicht, weil der Verbindungsstring dann nicht voll ausgeschrieben wird. So wie es aussieht, nimmt er den Pfad nur als vollständigen String an, also man muss den Verbindungsstring in Zwei Anführungsstrichen schreiben...
    Es muss irgendwie eine Lösung geben...

    Vielen Dank für deine Bemühungen.
  • @phype

    Deinen Code habe ich auch ausprobiert und es kommt die selbe Fehlermeldung wie bei Zerd:

    Quellcode

    1. Fehler 1 Der Ausdruck, der "verbindungsstr" zugewiesen wird, muss konstant sein. C:\Users\Benutzer\Desktop\Datenbank\Programm\Anmeldung.cs 33 47 Programm


    Jetzt habe ich aber noch ein zweites Problem, vllt. kann mir jemand da auch weiterhelfen:

    Ich habe zuvor das Programm mit Windows XP 32bit programmiert und jetzt möchte ich es mit Windows 7 64bit weiter programmieren.
    Wenn ich mich aber dann mit der Datenbank verbinden möchte, kommt folgende Fehlermeldung:

    Quellcode

    1. Fehler beim Anfügen einer automatisch benannten Datenbank für die Datei C:\Benutzer\Name\Desktop\Datenbank.mdf. Eine Datenbank mit diesem Namen ist bereits vorhanden, die angegebene Datei kann nicht geöffnet werden, oder sie befindet sich in der UNC-Freigabe.


    Auf Windows XP funktioniert das Programm aber so wie es sein soll.
    Liegt es an Windows 7? Wie kann ich das Problem beheben, oder muss ich eine neue Datenbank erstellen?

    mfg

    geronimo345
  • geronimo345 schrieb:

    @phype

    Deinen Code habe ich auch ausprobiert und es kommt die selbe Fehlermeldung wie bei Zerd:

    Quellcode

    1. Fehler 1 Der Ausdruck, der "verbindungsstr" zugewiesen wird, muss konstant sein. C:\Users\Benutzer\Desktop\Datenbank\Programm\Anmeldung.cs 33 47 Programm



    Aber der Fehler sagt doch nur das der string const ist...
    also versuchs mal so:

    PHP-Quellcode

    1. const string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
    2. const string verbindungsstr = "Data Source=.\\SQLEXPRESS;AttachDBFilename=" + desktopPath + "Datenbank.mdf;Integrated Security = true;Connect Timeout=30;User Instance=True";


    Ich hab hier leider kein c# installiert sonst würd ichs vorher testen, aber der Fehlermeldung nach zu urteilen müsste das gehen...
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • @Zerd:

    Ich habe es so gemacht, wie dus geschrieben hast und es kommen folgende Fehlermeldungen:

    Quellcode

    1. Fehler 1 Der Ausdruck, der "desktopPath" zugewiesen wird,
    2. muss konstant sein. C:\Users\Benutzer\Desktop\Programm\Programm
    3. \Anmeldung.cs 30 40 Programm


    und

    Quellcode

    1. Fehler 2 Der Ausdruck, der "verbindungsstr" zugewiesen wird,
    2. muss konstant sein. C:\Users\Benutzer\Desktop\Programm\Programm
    3. \Anmeldung.cs 31 43 Programm
  • Ok, ja logisch...

    wieso legst du verbindungsstr überhaupt als const an??

    so klappts (diesmal getestet):

    PHP-Quellcode

    1. string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
    2. string verbindungsstr = "Data Source=.\\SQLEXPRESS;AttachDBFilename=" + desktopPath + "Datenbank.mdf;Integrated Security = true;Connect Timeout=30;User Instance=True";
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • @ Zerd:

    wieso legst du verbindungsstr überhaupt als const an??


    Das ist eine gute Frage...

    SUPER!! Es funktioniert! Vielen Dank! :danke:
    (hätte ich ja auch mal ausprobieren können:löl:)

    Jetzt habe ich nur noch das zweite Problem, welches ich schon erwähnt habe:

    Jetzt habe ich aber noch ein zweites Problem, vllt. kann mir jemand da auch weiterhelfen:

    Ich habe zuvor das Programm mit Windows XP 32bit programmiert und jetzt möchte ich es mit Windows 7 64bit weiter programmieren.
    Wenn ich mich aber dann mit der Datenbank verbinden möchte, kommt folgende Fehlermeldung:

    Quellcode

    1. Fehler beim Anfügen einer automatisch benannten Datenbank für die
    2. Datei C:\Benutzer\Name\Desktop\Datenbank.mdf. Eine Datenbank mit diesem
    3. Namen ist bereits vorhanden, die angegebene Datei kann nicht geöffnet
    4. werden, oder sie befindet sich in der UNC-Freigabe.

    Auf Windows XP funktioniert das Programm aber so wie es sein soll.
    Liegt es an Windows 7? Wie kann ich das Problem beheben, oder muss ich eine neue Datenbank erstellen?
  • Du hast eine User Instance einer Datenbank erstellt, das bedeutet, dass diese Datenbank an den Ersteller-User gebunden ist.

    "User Instance bedeuten exclusiven Zugriff auf diese DB für genau einen User. Eben der der gerade eine Instanz gestartet hat." Das ist auch logisch, weil diese mdf file nicht von mehreren Usern gleichzeitig bearbeitet werden kann. Diese Sicherungsmaßnahme ist gleichzeitig dein Problem... Unter Windows 7 sieht dich die File nicht als Besitzer bzw. als validen user.

    Willst du die datenbank von mehreren personen verwalten lassen darfst du die Datenbank nicht als user instance anlegen, sondern sie muss in einem SQL Server registriert und dort dezentral verwaltet werden...
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • Willst du die datenbank von mehreren personen verwalten lassen darfst du die Datenbank nicht als user instance anlegen, sondern sie muss in einem SQL Server registriert und dort dezentral verwaltet werden...


    heißt das, ich müsste eine Datenbank erstellen, die man nur mit Anmeldedaten (also Benutzer und Passwort) bearbeiten kann, oder verstehe ich das falsch?
  • Vielen Dank für deine Hilfe Zerd. Dank dir konnte ich das erste Problem lösen. Die Lösung für das zweite Problem muss ich irgendwie im Internet finden.
    Den Link, den du mir gegeben hast, hilft mir nicht weiter, weil ich mit C# programmiere. Trotzdem danke!:thx:

    edit: Thread kann geschlossen werden

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von geronimo345 () aus folgendem Grund: bitte den Thread schließen