AttachDbFileName
är ett fruktansvärt och missvisande inslag. Det som händer är att varje applikation som ansluter till denna "databas" gör en kopia av datafilen. Så om Machine1
ansluter och gör ändringar, dessa ändringar är osynliga för Machine2
. Detta orsakar mycket förvirring även i ett scenario med en enda maskin eftersom människor kommer att ansluta via Visual Studio, göra någon uppdatering och sedan inte se det från Management Studio. Eller tvärtom. User Instance
funktionen har fasats ut
av en anledning; snälla sluta använda båda dessa.
Eftersom du vill att flera maskiner/applikationer ska ansluta till samma kopia av din databas, lösningen du vill ha är att ha en enda kopia av databasen kopplad till en enda instans av SQL Server, och båda applikationerna/maskinerna ansluter bara till den enda kopian.
På MACHINE1-PC
gör så här:
-
Flytta
ShopDatabase.mdf
och dess associerade.ldf
fil från din användarmapp och till datamappen för din instans. Det här blir något gillar: -
Anslut till den lokala Express-instansen med
.\SQLEXPRESS
. Bifoga databasen med följande kod: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;
-
Bestäm den externa IP-adressen för
MACHINE1-PC
(du kan göra detta via ping från en annan dator - lokalt kommer den att berätta för dig127.0.0.1
vilket är värdelöst). Förutsatt att du har en fast IP och inte använder DHCP, kommer detta troligen att vara ett mer tillförlitligt sätt att ansluta, eller åtminstone saknas ett extra steg (att lösa namnet). Om du använder DHCP men du vill inte lita på detta eftersom din IP-adress potentiellt kommer att förändras över tiden. Din anslutningssträng ska nu vara: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 anslutningssträng kunde använd Data Source=.\SQLEXPRESS
, men bättre att vara konsekvent än att spara ett par knapptryckningar. På det här sättet om du gör andra ändringar i din konfigurationsfil etc. kan de distribueras till andra maskiner utan att behöva ändra maskinnamnet.