AttachDbFileName
jest okropną i mylącą funkcją. Dzieje się tak, że każda aplikacja, która łączy się z tą „bazą danych”, tworzy kopię pliku danych. Więc jeśli Machine1
łączy się i wprowadza zmiany, te zmiany są niewidoczne dla Machine2
. Powoduje to wiele zamieszania nawet w scenariuszu z jednym komputerem, ponieważ ludzie będą łączyć się za pośrednictwem programu Visual Studio, wprowadzać pewne aktualizacje, a następnie nie będą widzieć tego z Management Studio. Lub odwrotnie. User Instance
funkcja została przestarzała
z powodu; proszę przestań używać obu.
Ponieważ chcesz, aby wiele komputerów/aplikacji łączyło się z tym samym kopię bazy danych, rozwiązanie, które chcesz, to mieć pojedynczą kopię bazy danych dołączoną do jednej instancji SQL Server, a obie aplikacje/maszyny po prostu łączą się z tą pojedynczą kopią.
Na MACHINE1-PC
zrób to:
-
Przenieś
ShopDatabase.mdf
i powiązany z nim plik.ldf
plik z folderu użytkownika i do folderu danych dla swojej instancji. To będzie coś jak: -
Połącz się z lokalną instancją Express za pomocą
.\SQLEXPRESS
. Dołącz bazę danych używając następującego kodu: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;
-
Określ zewnętrzny adres IP
MACHINE1-PC
(możesz to zrobić przez ping z innej maszyny - lokalnie powie Ci127.0.0.1
co jest bezużyteczne). Zakładając, że masz stały adres IP i nie używasz DHCP, prawdopodobnie będzie to bardziej niezawodny sposób na połączenie, a przynajmniej brakuje dodatkowego kroku (rozwiązania nazwy). Jeśli używasz DHCP, nie będziesz chciał na tym polegać, ponieważ Twój adres IP może się z czasem zmienić. Twoje parametry połączenia powinny teraz wyglądać tak: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)
Na Machine1
Twój ciąg połączenia może użyj Data Source=.\SQLEXPRESS
, ale lepiej być konsekwentnym, niż zaoszczędzić kilka naciśnięć klawiszy. W ten sposób, jeśli wprowadzisz inne zmiany w swoim pliku konfiguracyjnym itp., mogą one zostać rozesłane na inne komputery bez konieczności zmiany nazwy komputera.