AttachDbFileName
é uma característica terrível e enganosa. O que acontece é que cada aplicativo que se conecta a esse "banco de dados" faz uma cópia do arquivo de dados. Portanto, se Machine1
conecta e faz alterações, essas alterações são invisíveis para Machine2
. Isso causa muita confusão, mesmo em um cenário de máquina única, porque as pessoas se conectarão via Visual Studio, farão alguma atualização e não a verão no Management Studio. Ou vice-versa. A User Instance
recurso foi descontinuado
por uma razão; por favor, pare de usar ambos. Como você deseja que várias máquinas/aplicativos se conectem ao mesmo cópia do seu banco de dados, a solução que você deseja é ter uma única cópia do banco de dados anexada a uma única instância do SQL Server, e ambos os aplicativos/máquinas apenas se conectam a essa única cópia.
Em
MACHINE1-PC
fazem isto:-
MoverShopDatabase.mdf
e seu.ldf
associado arquivo da sua pasta de usuário para a pasta de dados da sua instância. Isso será algo Curti:
-
Conecte-se à instância local do Express usando.\SQLEXPRESS
. Anexe o banco de dados usando o seguinte 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 o endereço IP externo deMACHINE1-PC
(você pode fazer isso via ping de outra máquina - localmente, ele informará127.0.0.1
que é inútil). Supondo que você tenha um IP fixo e não esteja usando DHCP, essa provavelmente será uma maneira mais confiável de se conectar, ou pelo menos está faltando uma etapa extra (resolver o nome). Se você usa DHCP, não vai querer confiar nisso porque seu endereço IP pode mudar com o tempo. Sua string de conexão agora deve 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)
Na
Machine1
sua string de conexão poderia use Data Source=.\SQLEXPRESS
, mas é melhor ser consistente do que salvar algumas teclas. Desta forma, se você fizer outras alterações em seu arquivo de configuração, etc., elas podem ser distribuídas para outras máquinas sem a necessidade de alterar o nome da máquina.