AttachDbFilename
Ich habe heute versucht ein Sample zu starten, welches einen Connectionstring wie diesen enthält:
const string connectionString = @”Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\SampleInstanceStore.mdf; Integrated Security=True;Asynchronous Processing=True”;
Dabei erhielt ich die Fehlermeldung:
System.Data.SqlClient.SqlException: Fehler beim Anfügen einer automatisch benannten Datenbank für die Datei C:\Users\Martin\Some more subfolders\SampleInstanceStore.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.
(System.Data.SqlClient.SqlException: An attempt to attach an auto-named database for file C:\Users\Martin\Some more subfolders\SampleInstanceStore.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.)
Grund ist, das der SQL Server beim Zugriff auf die Datenbankdatei seinen eigenen Benutzeraccount verwendet, in diesem Fall war es NetworkService (Netzwerkdienst). Und der hatte keine Zugriffsrechte auf meine Dateien. Jedoch genügt es auch nicht, den Dateien oder dem Verzeichnis diese Rechte zu geben. Wenn AttachDbFilename wie hier ohne Angabe eines Datenbanknamens verwendet wird, so entspricht der Datenbankname dem Pfadnamen der Datei. Und um diesen zu ermitteln schaut der SQL-Server sich -mit seinem Account- alle übergeordneten Verzeichnisse an. Er benötigt somit auch dort zumindest Leserechte.
Mögliche Lösungen:
- User Instances: Mit
user instance=trueim Connectionstring wird eine weiter Instanz von SQL-Server Express (und nur Express!), die unter den Rechten des Benutzers läuft, gestartet. Microsoft möchte dieses Feature allerdings künftig wegfallen lassen. - Server Manager: Die Datenbank mit dem Server Manger erzeugen bzw. hinzufügen - und den Connectionstring entsprechend anpassen.
- Lokales System: Theoretisch könnte man dem SQL Server auch unter einen weniger eingeschränkten Account, wie Lokales System (local system) laufen lassen. Aus Sicherheitsgründen wird man das aber niemals, und erst recht nicht auf einem Produktivsystem, machen wollen.
- Initial Catalog: Wenn man zusätzlich zu AttachDbFilename den database/initial catalog Parameter setzt so wird dieser Name verwendet. Es genügt dann, wenn die .mdf Datei und ihr Verzeichnis die entsprechenden Rechte besitzt.
Posted: Mai 28th, 2009 under SQL Server.
Comments: none
Dann kann sich der Debugger über TCP/IP, also auch an einem entfernten Rechner, und andere Protokolle mit der VM verbinden. Es ist sowohl möglich, daß der Debugger das zu debuggende Programm aufruft, als auch umgekehrt.
Zudem kann ein .NET Programm erkennen, ob es mit einem Debugger verbunden ist (
Die Volltextsuche in SQL Server 2008 nutzt natürlich auch Stoppwörter. Wenn man diese nicht selbst festlegen möchte kann man die von Microsoft in der Tabelle
Ich brauchte mal wieder etwas zum Angeben. Daher bin ich jetzt nicht mehr nur ein gewöhnlicher professioneller Entwickler wie jeder andere auch. Nein, ich bin ein Microsoft Zertifizierter Professioneller Entwickler (