AttachDbFileName
er en frygtelig og vildledende funktion. Hvad der sker er, at hver applikation, der forbinder til denne "database", laver en kopi af datafilen. Så hvis Machine1
forbinder og foretager ændringer, er disse ændringer usynlige for Machine2
. Dette forårsager en masse forvirring, selv i et enkelt-maskine-scenarie, fordi folk vil oprette forbindelse via Visual Studio, lave en opdatering og derefter ikke se det fra Management Studio. Eller omvendt. User Instance
funktion er blevet forældet
Af en grund; stop venligst med at bruge begge disse.
Da du vil have flere maskiner/applikationer til at oprette forbindelse til den samme kopi af din database, er den løsning, du ønsker, at have en enkelt kopi af databasen knyttet til en enkelt forekomst af SQL Server, og begge applikationer/maskiner forbindes bare til den enkelte kopi.
På MACHINE1-PC
gør dette:
-
Flyt
ShopDatabase.mdf
og dens tilhørende.ldf
fil ud af din brugermappe og ind i datamappen for din instans. Dette vil være noget som: -
Opret forbindelse til den lokale Express-instans ved hjælp af
.\SQLEXPRESS
. Vedhæft databasen ved hjælp af følgende kode: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;
-
Bestem den eksterne IP-adresse på
MACHINE1-PC
(du kan gøre dette via ping fra en anden maskine - lokalt vil den fortælle dig127.0.0.1
hvilket er ubrugeligt). Hvis du antager, at du har en fast IP og ikke bruger DHCP, vil dette sandsynligvis være en mere pålidelig måde at oprette forbindelse på, eller i det mindste mangler et ekstra trin (at løse navnet). Hvis du bruger DHCP, vil du dog ikke stole på dette, fordi din IP-adresse potentielt vil ændre sig over tid. Din forbindelsesstreng skulle nu være: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)
På Machine1
din forbindelsesstreng kunne brug Data Source=.\SQLEXPRESS
, men bedre at være konsekvent end at gemme et par tastetryk. På denne måde, hvis du foretager andre ændringer i din konfigurationsfil osv., kan de distribueres til andre maskiner uden at skulle ændre maskinnavnet.