【问题标题】:Copying .mdf file from app_data folder to default localhost folder将 .mdf 文件从 app_data 文件夹复制到默认 localhost 文件夹
【发布时间】:2012-06-09 08:01:11
【问题描述】:

我的朋友给了我一个数据库文件:record.mdf。我将 .mdf 文件复制到了我的 app_data 文件夹中,我可以访问它。

但是,连接字符串包含绝对路径:

AttachDbFilename="C:\Users\Dell\Documents\Visual Studio 2010\Projects\WebApplication2\WebApplication2\App_Data\record.mdf"

但我希望它使用以下方式连接:

Data Source=localhost\SQLEXPRESS;

如何将.mdf 文件复制到 SQL Server 的本地文件夹,使连接字符串不使用数据库的绝对路径?

我使用的是 Visual Studio 2010。我没有 SQL Server Management Studio。

【问题讨论】:

    标签: sql-server mdf


    【解决方案1】:

    第 1 步:您需要找出 SQL Server 的数据目录。这将类似于

    C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data
    

    默认情况下(对于 SQL Server 2008 R2 Express) - 根据您的 SQL Server Express 安装方式(以及您拥有的版本),您的情况可能会略有不同。

    第 2 步:将 record.mdf 文件复制到该目录

    第 3 步:将其附加到您的 SQL Server Express 实例 - 如果您手头没有 Mgmt Studio,请使用 sqlcmd

    c:\> sqlcmd -S .\SQLExpress 
    

    然后在 sqlcmd 提示符下,输入:

    USE [master]
    GO
    CREATE DATABASE record ON 
       (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\record.mdf' )
    FOR ATTACH_REBUILD_LOG;
    GO
    

    这会将.mdf 文件作为新的“逻辑”数据库record 附加到您的SQL Server Express 实例,并在此过程中重建丢失的事务日志文件(.ldf)。

    从现在开始,你可以使用

    server=.\SQLEXPRESS;Database=record;Integrated Security=SSPI;
    

    作为连接到数据库的连接字符串

    【讨论】:

      【解决方案2】:

      您可以使用|DataDirectory|\record.mdf从 App_Data 目录访问它,而不是将其复制到 SQL 服务器本地文件夹中

      文档:http://msdn.microsoft.com/en-us/library/ms247257(v=vs.80).aspx

      【讨论】:

      • 这是一个相当笨拙和凌乱的事情 - 它可能会起作用 - 有时。但这绝对不是要走的路——你应该将你的 .mdf 附加到你的服务器实例上——使用起来更容易
      • 为什么这么笨拙?它是 Microsoft 示例中使用的标准方式,并在实体框架连接中自动使用。如果您只需要从单个 ASP.NET 应用程序中访问数据库,这是可行的方法,因为您根本不需要接触 SQL 服务器(因此适合部署在您没有管理员或SA 访问)。如果您需要从管理工作室(OP 说他没有)或多个项目访问同一个数据库,那么附加具有优势。
      • 首先 - 整个 User INstance 故事已经被弃用,并且基本上从 SQL Server 2012 中被淘汰。毕竟这似乎是一个非常糟糕的主意 - 我同意。另外:在这种情况下,您会遇到很多混乱的情况,Visual Studio 在 .mdf 文件周围进行复制,我们在 Stackoverflow 上有很多问题,开发人员将数据插入到他们的 .mdf 中(在他们的本地输出文件夹中),但是在他们的应用程序运行后,数据就消失了(因为 .mdf 已被复制并使用然后处理)。乱七八糟....
      • 顺便说一句:仅仅因为微软内部的一些团队正在这样做并不意味着被复制是一个好主意.....看看 ASP.NET 成员数据库与 GUID 上的聚集索引列 - 非常糟糕.....
      • 我无法评论被复制的数据文件,但用户实例从 2012 年开始肯定没有被消灭——它变成了LocalDB
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 2020-04-18
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多