AttachDbFileName
е ужасна и подвеждаща функция. Това, което се случва е, че всяко приложение, което се свързва с тази "база данни", прави копие на файла с данни. Така че, ако Machine1
се свързва и прави промени, тези промени са невидими за Machine2
. Това причинява много объркване дори в сценарий с една машина, защото хората ще се свържат чрез Visual Studio, ще направят някаква актуализация и след това няма да го видят от Management Studio. Или обратното. User Instance
функцията е отхвърлена
по причина; моля, спрете да използвате и двете.
Тъй като искате множество машини/приложения да се свързват към едно и също копие на вашата база данни, решението, което искате, е да имате едно копие на базата данни, прикрепено към един екземпляр на SQL Server и двете приложения/машини просто да се свързват с това едно копие.
На MACHINE1-PC
направете това:
-
Преместете
ShopDatabase.mdf
и свързания с него.ldf
файл от вашата потребителска папка и в папката с данни за вашия екземпляр. Това ще бъде нещо като: -
Свържете се с локалния експресен екземпляр чрез
.\SQLEXPRESS
. Прикачете базата данни използвайки следния код: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;
-
Определете външния IP адрес на
MACHINE1-PC
(можете да направите това чрез ping от друга машина - локално ще ви каже127.0.0.1
което е безполезно). Ако приемем, че имате фиксиран IP и не използвате DHCP, това вероятно ще бъде по-надежден начин за свързване или поне липсва допълнителна стъпка (разрешаване на името). Ако обаче използвате DHCP, няма да искате да разчитате на това, защото вашият IP адрес потенциално ще се промени с течение на времето. Вашият низ за връзка сега трябва да бъде: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)
На Machine1
вашият низ за връзка може използвайте Data Source=.\SQLEXPRESS
, но по-добре да сте последователни, отколкото да спестите няколко натискания на клавиши. По този начин, ако направите други промени във вашия конфигурационен файл и т.н., те могат да бъдат разпространени на други машини, без да е необходимо да променяте името на машината.