-4

我有两台机器分别运行一个 C#.net windows 窗体应用程序。我希望它们都连接到其中一台机器中的单个 SQL Server 数据库。而且我喜欢这两个应用程序都可以与那个单一的数据库一起工作。但不幸的是,我遇到了这个 UNC 共享问题。有没有办法解决这个问题?还是我必须尝试不同的方法。请帮我。我会很感激它。

4

1 回答 1

3

AttachDbFileName是一个可怕且具有误导性的功能。发生的情况是每个连接到这个“数据库”的应用程序都会复制数据文件。因此,如果Machine1连接并进行更改,这些更改对Machine2. 即使在单机方案中,这也会引起很多混乱,因为人们将通过 Visual Studio 连接,进行一些更新,然后在 Management Studio 中看不到它。或相反亦然。User Instance功能已被弃用是有原因的;请停止使用这两个。

由于您希望多台机器/应用程序连接到数据库的同一副本,因此您想要的解决方案是将数据库的单个副本附加到 SQL Server 的单个实例,并且两个应用程序/机器都连接到该单个副本.

这样MACHINE1-PC做:

  1. ShopDatabase.mdf其及其关联.ldf文件移出您的用户文件夹并移至您的实例的数据文件夹中。这将是这样的:

    C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Data\

  2. 使用 连接到本地 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;
    
  3. 确定外部 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,但最好保持一致而不是保存几次击键。这样,如果您对配置文件等进行其他更改,它们可以分发到其他机器,而无需更改机器名称。

于 2013-03-24T14:19:34.397 回答