SQL Datenbank Verbindungsproblem geschlossen 

  • Ersteller Ersteller geronimo345
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
G

geronimo345

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:
Code:
const string verbindungsstr = "Data Source=.\\SQLEXPRESS;AttachDBFilename=C:\\Benutzer\\Name\\Desktop\\Datenbank.mdf;Integrated Security = true;Connect Timeout=30;User Instance=True";

SqlConnection sqlc = new SqlConnection(verbindungsstr);
sqlc.Open();

Ich habe schon versucht das irgendwie mit
Code:
System.Environment.SpecialFolder.Desktop.ToString()
hinzubekommen, aber ich habs so nicht geschafft...

Vielleicht kann mir jemand weiterhelfen?

mfg
geronimo345
 
Ja, ich hatte das so gemeint. So hatte ich es im Internet gefunden.
Bloß wie kann ich das in dem Verbindungsstring sinnvoll einbringen?
 
Ungetestet würde ich so vermuten:
PHP:
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
const string verbindungsstr = "Data Source=.\\SQLEXPRESS;AttachDBFilename=" + desktopPath + "Datenbank.mdf;Integrated Security = true;Connect Timeout=30;User Instance=True";
 
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.
 
Wie wärs mit:

Code:
string pfad = Enviroment.GetEnviromentVariable("USERPROFILE") + "\\Desktop\\menedatei.db";

funktioniert auf allen Windoewsen auf denen .Net läuft glaub ich

mfg
 
@phype

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

Code:
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:

Code:
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
 
@phype

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

Code:
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:
const string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
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...
 
@Zerd:

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

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

und

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

wieso legst du verbindungsstr überhaupt als const an??

so klappts (diesmal getestet):
PHP:
 string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string verbindungsstr = "Data Source=.\\SQLEXPRESS;AttachDBFilename=" + desktopPath + "Datenbank.mdf;Integrated Security = true;Connect Timeout=30;User Instance=True";
 
@ Zerd:

wieso legst du verbindungsstr überhaupt als const an??

Das ist eine gute Frage...

SUPER!! Es funktioniert! Vielen Dank! :thx:
(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:

Code:
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?
 
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...
 
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
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten