我有两台机器运行C#.net windows窗体应用程序。我希望它们都连接到其中一台机器中的单个SQL Server数据库。我喜欢使用这两个应用程序来处理单个数据库。但不幸的是我得到了这个UNC分享问题。有办法解决这个问题吗?或者我必须尝试不同的方法。请帮我。我很感激。
答案 0 :(得分:3)
AttachDbFileName
是一个可怕且具有误导性的功能。发生的事情是连接到此“数据库”的每个应用程序都会生成数据文件的副本。因此,如果Machine1
连接并进行更改,那么这些更改对Machine2
是不可见的。即使在单机场景中,这也会引起很多混乱,因为人们将通过Visual Studio连接,进行一些更新,然后不会从Management Studio中看到它。或相反亦然。 The User Instance
feature has been deprecated是有原因的;请停止使用这两个。
由于您希望多台计算机/应用程序连接到数据库的相同副本,因此您需要的解决方案是将一个数据库副本附加到单个SQL Server实例,并且两个应用程序/机器只连接到该单个副本。
在MACHINE1-PC
上执行此操作:
将ShopDatabase.mdf
及其关联的.ldf
文件移出您的用户文件夹,然后移至您实例的数据文件夹中。这将是之类的东西:
C:\ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ Data \
使用.\SQLEXPRESS
连接到本地Express实例。 Attach the database使用以下代码:
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;
确定MACHINE1-PC
的外部IP地址(您可以通过另一台计算机执行此操作 - 在本地它将告诉您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
,但最好保持一致,而不是保存几次击键。这样,如果您对配置文件等进行其他更改,则可以将其分发到其他计算机,而无需更改计算机名称。