UNC共享上的SQL Server数据库

时间:2013-03-24 13:46:41

标签: sql-server-2008 unc

我有两台机器运行C#.net windows窗体应用程序。我希望它们都连接到其中一台机器中的单个SQL Server数据库。我喜欢使用这两个应用程序来处理单个数据库。但不幸的是我得到了这个UNC分享问题。有办法解决这个问题吗?或者我必须尝试不同的方法。请帮我。我很感激。

1 个答案:

答案 0 :(得分:3)

AttachDbFileName是一个可怕且具有误导性的功能。发生的事情是连接到此“数据库”的每个应用程序都会生成数据文件的副本。因此,如果Machine1连接并进行更改,那么这些更改对Machine2是不可见的。即使在单机场景中,这也会引起很多混乱,因为人们将通过Visual Studio连接,进行一些更新,然后不会从Management Studio中看到它。或相反亦然。 The User Instance feature has been deprecated是有原因的;请停止使用这两个。

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

MACHINE1-PC上执行此操作:

  1. ShopDatabase.mdf及其关联的.ldf文件移出您的用户文件夹,然后移至您实例的数据文件夹中。这将是之类的东西

      

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

  2. 使用.\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;
    
  3. 确定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)
    
  4. Machine1上,您的连接字符串可以使用Data Source=.\SQLEXPRESS,但最好保持一致,而不是保存几次击键。这样,如果您对配置文件等进行其他更改,则可以将其分发到其他计算机,而无需更改计算机名称。