AttachDbFileName
es una característica terrible y engañosa. Lo que pasa es que cada aplicación que se conecta a esta "base de datos" hace una copia del archivo de datos. Así que si Machine1
se conecta y realiza cambios, esos cambios son invisibles para Machine2
. Esto causa mucha confusión incluso en un escenario de una sola máquina porque las personas se conectarán a través de Visual Studio, realizarán alguna actualización y luego no la verán desde Management Studio. O viceversa. La User Instance
la función ha quedado obsoleta
por una razón; deja de usar ambos.
Dado que desea que varias máquinas/aplicaciones se conecten al mismo copia de su base de datos, la solución que desea es tener una sola copia de la base de datos adjunta a una sola instancia de SQL Server, y ambas aplicaciones/máquinas simplemente se conectan a esa única copia.
En MACHINE1-PC
haz esto:
-
Mover
ShopDatabase.mdf
y su asociado.ldf
archivo fuera de su carpeta de usuario y dentro de la carpeta de datos para su instancia. Esto será algo como: -
Conéctese a la instancia Express local usando
.\SQLEXPRESS
. Adjunte la base de datos usando el siguiente código: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;
-
Determine la dirección IP externa de
MACHINE1-PC
(puede hacer esto a través de un ping desde otra máquina - localmente le dirá127.0.0.1
que es inútil). Suponiendo que tiene una IP fija y no está usando DHCP, es probable que esta sea una forma más confiable de conectarse, o al menos le falta un paso adicional (resolver el nombre). Sin embargo, si usa DHCP, no querrá confiar en esto porque su dirección IP cambiará potencialmente con el tiempo. Su cadena de conexión ahora debería ser: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)
En Machine1
su cadena de conexión podría use Data Source=.\SQLEXPRESS
, pero mejor ser coherente que ahorrarse un par de pulsaciones. De esta manera, si realiza otros cambios en su archivo de configuración, etc., se pueden distribuir a otras máquinas sin necesidad de cambiar el nombre de la máquina.