我有两台机器分别运行一个 C#.net windows 窗体应用程序。我希望它们都连接到其中一台机器中的单个 SQL Server 数据库。而且我喜欢这两个应用程序都可以与那个单一的数据库一起工作。但不幸的是,我遇到了这个 UNC 共享问题。有没有办法解决这个问题?还是我必须尝试不同的方法。请帮我。我会很感激它。
1 回答
AttachDbFileName
是一个可怕且具有误导性的功能。发生的情况是每个连接到这个“数据库”的应用程序都会复制数据文件。因此,如果Machine1
连接并进行更改,这些更改对Machine2
. 即使在单机方案中,这也会引起很多混乱,因为人们将通过 Visual Studio 连接,进行一些更新,然后在 Management Studio 中看不到它。或相反亦然。该User Instance
功能已被弃用是有原因的;请停止使用这两个。
由于您希望多台机器/应用程序连接到数据库的同一副本,因此您想要的解决方案是将数据库的单个副本附加到 SQL Server 的单个实例,并且两个应用程序/机器都连接到该单个副本.
这样MACHINE1-PC
做:
将
ShopDatabase.mdf
其及其关联.ldf
文件移出您的用户文件夹并移至您的实例的数据文件夹中。这将是这样的:C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Data\
使用 连接到本地 Express 实例
.\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
,但最好保持一致而不是保存几次击键。这样,如果您对配置文件等进行其他更改,它们可以分发到其他机器,而无需更改机器名称。