AttachDbFileName
adalah fitur yang mengerikan dan menyesatkan. Yang terjadi adalah setiap aplikasi yang terhubung ke "database" ini membuat salinan dari file data. Jadi jika Machine1
menghubungkan, dan membuat perubahan, perubahan itu tidak terlihat oleh Machine2
. Ini menyebabkan banyak kebingungan bahkan dalam skenario mesin tunggal karena orang akan terhubung melalui Visual Studio, membuat beberapa pembaruan, dan kemudian tidak akan melihatnya dari Management Studio. Atau sebaliknya. User Instance
fitur tidak digunakan lagi
untuk sebuah alasan; tolong hentikan penggunaan keduanya.
Karena Anda ingin beberapa mesin/aplikasi terhubung ke sama salinan database Anda, solusi yang Anda inginkan adalah memiliki satu salinan database yang dilampirkan ke satu contoh SQL Server, dan kedua aplikasi/mesin hanya terhubung ke salinan tunggal itu.
Di MACHINE1-PC
lakukan ini:
-
Pindahkan
ShopDatabase.mdf
dan.ldf
yang terkait dengannya file dari folder pengguna Anda dan ke dalam folder data untuk instance Anda. Ini akan menjadi sesuatu seperti: -
Hubungkan ke instans Express lokal menggunakan
.\SQLEXPRESS
. Lampirkan database menggunakan kode berikut: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;
-
Tentukan alamat IP eksternal
MACHINE1-PC
(Anda dapat melakukan ini melalui ping dari komputer lain - secara lokal ia akan memberi tahu Anda127.0.0.1
yang tidak berguna). Dengan asumsi Anda memiliki IP tetap dan tidak menggunakan DHCP, ini kemungkinan akan menjadi cara yang lebih andal untuk terhubung, atau setidaknya tidak ada langkah tambahan (menyelesaikan nama). Jika Anda menggunakan DHCP, Anda tidak ingin bergantung pada ini karena alamat IP Anda berpotensi berubah seiring waktu. String koneksi Anda sekarang seharusnya: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)
Di Machine1
string koneksi Anda bisa gunakan Data Source=.\SQLEXPRESS
, tetapi lebih baik konsisten daripada menyimpan beberapa penekanan tombol. Dengan cara ini jika Anda membuat perubahan lain pada file konfigurasi Anda, dll. mereka dapat didistribusikan ke mesin lain tanpa perlu mengubah nama mesin.