我有一个 SQL Server 2005 .mdf 文件,我试图在 SQL Server Management Studio 中打开它,以便我可以向表中添加一个字段,但我无法打开该文件。我不能说我真的了解 SQL Server 如何处理这些数据库。我特别不明白“附加”和“分离”操作。
我现在在 VB.Net 2008 中工作,但我的背景是使用 JET 引擎的 VB6。使用 JET 引擎非常简单,但使用 SQL Server 似乎要复杂得多。我正在尝试像使用 .mdb 文件一样使用 .mdf 文件。我希望我的应用程序找到数据库文件,“附加到它”,然后让我操作它。
有一次,我能够在 SQL Server Management Studio 中打开我的数据库并编辑数据库的设计。该应用程序仍然有效,但我无法再修改数据库,因为我无法在 Management Studio 中附加到它。
这是一个重要的线索:文件不再位于特殊文件夹中,即c:\Program Files (x86)\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\
. 我可能愚蠢地删除了这些文件,认为它们是多余的。我的硬盘上仍然有 .mdf 文件(和 _log.ldf 文件),应用程序仍然可以打开它,但是当我尝试使用 Management Studio 附加到 .mdf 文件时,出现以下错误:
无法打开物理文件“c:\Program Files (x86)\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\HEALSExamsSQL.mdf”。操作系统错误 2:“2(系统找不到指定的文件。)”。(.Net SqlClient 数据提供程序)
确实该文件不在那里,但为什么 Mgmt Studio 会在那里寻找?为什么它不直接打开文件所在的位置?我该怎么做才能取回它?我什至将文件复制到该文件夹,但出现相同的错误。
这是另一个线索:在 Management Studio 中,当我右键单击“数据库”并选择“附加”时,它会弹出一个对话框。在那里我单击“添加”以获取另一个对话框,我将在其中选择一个数据库,但在对话框出现之前,我收到此错误:
定位数据库文件 - KURANT-WIN7\SQLEXPRESS
C:\Users\Jason Kurant\Desktop
无法访问服务器上的指定路径或文件。验证您是否具有必要的安全权限以及路径或文件是否存在。
如果您知道服务帐户可以访问特定文件,请在“定位”对话框的“文件名”控件中键入文件的完整路径。
这向我表明存在一些访问控制问题,但我无法弄清楚它是什么。任何人都可以提出解决此问题的方法吗?
以及如何查看 .mdf 文件中的数据?
Aar*_*and 10
当我尝试使用 Management Studio 附加到 .mdf 文件时
真的没有一种温和的方式可以这样说:停止这样做。GUI 充满了错误和糟糕的默认值;更重要的是,除非您进行截屏,否则当您通过 GUI 指向并单击时,我们无法准确确定您正在执行哪些步骤。
sa
帐户)登录。如果您不是系统管理员,或者丢失了sa
密码,请参阅此提示以找回密码。请确保这两个文件都在这个位置(你永远不应该像在用户文件夹是指向SQL服务器...\Jason Kurant\...
):
C:\Program Files (x86)\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\
还运行以下代码以验证以上是正确的路径:
USE master;
GO
EXEC sp_helpfile;
Run Code Online (Sandbox Code Playgroud)
这些文件的位置应该匹配。您可能有多个 SQL Server 实例,并且您正在查找错误实例的数据文件夹。
运行以下代码(或修复路径以匹配master
上面数据库的位置,如果不同):
CREATE DATABASE HEALSExamsSQL
ON (Name = HEALSExamsSQL_Data, FileName =
'C:\Program Files (x86)\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\mort.mdf')
LOG ON (Name = HEALSExamsSQL__Log, FileName =
'C:\Program Files (x86)\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\mort_log.ldf')
FOR ATTACH;
Run Code Online (Sandbox Code Playgroud)您可能会在此处收到错误消息。例如,日志文件可能没有完全分离,在这种情况下,您可以尝试更改FOR ATTACH
为FOR ATTACH_REBUILD_LOG
. 如果这也不起作用,那么您的 MDF 文件也可能已损坏(如果您做到这一点并分享更有意义的错误消息,我们可以更好地推测)。
理想情况下,您会返回到原始系统并获得适当的备份,然后还原,而不是附加。
我正在尝试像使用 .mdb 文件一样使用 .mdf 文件。
嗯,它们不一样。这类似于说您想在 Nascar 比赛中使用您的拖拉机,但以您在农场中驾驶它的方式驾驶它,并期望获胜。如果您想使用 SQL Server,您需要坐下来学习 SQL Server 的工作原理,而忘记 Access(恕我直言,它并不是真正的关系数据库平台,更像是一个美化的电子表格)。
我希望我的应用程序找到数据库文件,“附加到它”,然后让我操作它。
您应该避免使用 MDF/LDF 文件作为“备份”,因为它们绝非如此。请阅读这篇文章了解更多详情: