AttachDbFileName
ist eine schreckliche und irreführende Funktion. Was passiert ist, dass jede Anwendung, die sich mit dieser "Datenbank" verbindet, eine Kopie der Datendatei erstellt. Wenn also Machine1
verbindet und Änderungen vornimmt, sind diese Änderungen für Machine2
unsichtbar . Dies führt selbst in einem Einzelcomputerszenario zu erheblicher Verwirrung, da die Benutzer eine Verbindung über Visual Studio herstellen, einige Aktualisierungen vornehmen und diese dann von Management Studio aus nicht sehen. Oder umgekehrt. Die User Instance
Funktion wurde eingestellt
aus einem Grund; Bitte hören Sie auf, beides zu verwenden.
Da Sie möchten, dass sich mehrere Computer/Anwendungen mit demselben verbinden Kopie Ihrer Datenbank, besteht die gewünschte Lösung darin, eine einzelne Kopie der Datenbank an eine einzelne Instanz von SQL Server anzuhängen, und beide Anwendungen/Maschinen stellen einfach eine Verbindung zu dieser einzelnen Kopie her.
Auf MACHINE1-PC
tun Sie dies:
-
Verschieben Sie
ShopDatabase.mdf
und die zugehörige.ldf
Datei aus Ihrem Benutzerordner und in den Datenordner für Ihre Instanz. Das wird etwas sein wie: -
Stellen Sie mit
.\SQLEXPRESS
eine Verbindung zur lokalen Express-Instanz her . Datenbank anhängen Verwenden Sie den folgenden Code:CREATE DATABASE ShopDatabase ON (FILENAME = 'C:\...\ShopDatabase.mdf'), -------------------^^^ fill this in (FILENAME = 'C:\...\ShopDatabase_Log.ldf') -------------------^^^ fill this in FOR ATTACH; -- if there is no log file, you may need to do: CREATE DATABASE ShopDatabase ON (FILENAME = 'C:\...\ShopDatabase.mdf') -------------------^^^ fill this in FOR ATTACH_REBUILD_LOG;
-
Bestimmen Sie die externe IP-Adresse von
MACHINE1-PC
(Sie können dies per Ping von einem anderen Computer aus tun - lokal wird Ihnen127.0.0.1
mitgeteilt was sinnlos ist). Angenommen, Sie haben eine feste IP und verwenden kein DHCP, ist dies wahrscheinlich eine zuverlässigere Verbindungsmethode oder es fehlt zumindest ein zusätzlicher Schritt (Auflösen des Namens). Wenn Sie jedoch DHCP verwenden, sollten Sie sich nicht darauf verlassen, da sich Ihre IP-Adresse möglicherweise im Laufe der Zeit ändert. Ihre Verbindungszeichenfolge sollte jetzt lauten:Data Source=MACHINE1-PC\SQLEXPRESS; Network=DBMSSOCN; Integrated Security=True; Initial Catalog=ShopDatabase; -- or: Data Source=<<IP Address>>\SQLEXPRESS; Network=DBMSSOCN; Integrated Security=True; Initial Catalog=ShopDatabase; -- (replace <<IP Address>> of course)
Auf Machine1
Ihre Verbindungszeichenfolge könnte Verwenden Sie Data Source=.\SQLEXPRESS
, aber besser konsequent sein, als ein paar Tastenanschläge zu sparen. Auf diese Weise können andere Änderungen an Ihrer Konfigurationsdatei usw. an andere Computer verteilt werden, ohne dass der Computername geändert werden muss.