AttachDbFileName
là một tính năng khủng khiếp và gây hiểu lầm. Điều xảy ra là mỗi ứng dụng kết nối với "cơ sở dữ liệu" này tạo một bản sao của tệp dữ liệu. Vì vậy, nếu Machine1
kết nối và thực hiện thay đổi, những thay đổi đó không hiển thị đối với Machine2
. Điều này gây ra nhiều nhầm lẫn ngay cả trong kịch bản một máy vì mọi người sẽ kết nối qua Visual Studio, thực hiện một số cập nhật và sau đó sẽ không nhìn thấy nó từ Management Studio. Hoặc ngược lại. User Instance
tính năng đã không còn được dùng nữa
vì một lý do; vui lòng ngừng sử dụng cả hai.
Vì bạn muốn nhiều máy / ứng dụng kết nối với cùng một bản sao cơ sở dữ liệu của bạn, giải pháp bạn muốn là có một bản sao cơ sở dữ liệu duy nhất được đính kèm với một phiên bản SQL Server và cả hai ứng dụng / máy chỉ kết nối với bản sao duy nhất đó.
Trên MACHINE1-PC
làm điều này:
-
Di chuyển
ShopDatabase.mdf
và.ldf
được liên kết của nó tệp ra khỏi thư mục người dùng của bạn và vào thư mục dữ liệu cho phiên bản của bạn. Đây sẽ là cái gì đó như: -
Kết nối với phiên bản Express cục bộ bằng
.\SQLEXPRESS
. Đính kèm cơ sở dữ liệu sử dụng mã sau: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;
-
Xác định địa chỉ IP bên ngoài của
MACHINE1-PC
(bạn có thể thực hiện việc này thông qua ping từ một máy khác - cục bộ nó sẽ cho bạn biết127.0.0.1
mà là vô ích). Giả sử bạn có một IP cố định và không sử dụng DHCP, đây có thể sẽ là một cách kết nối đáng tin cậy hơn, hoặc ít nhất là thiếu một bước bổ sung (giải quyết tên). Nếu bạn sử dụng DHCP, mặc dù bạn sẽ không muốn dựa vào điều này vì địa chỉ IP của bạn có thể sẽ thay đổi theo thời gian. Chuỗi kết nối của bạn bây giờ sẽ là: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)
Trên Machine1
chuỗi kết nối của bạn có thể sử dụng Data Source=.\SQLEXPRESS
, nhưng tốt hơn là nên nhất quán hơn là lưu một vài lần nhấn phím. Bằng cách này nếu bạn thực hiện các thay đổi khác đối với tệp cấu hình của mình, v.v. chúng có thể được phân phối cho các máy khác mà không cần thay đổi tên máy.