【问题标题】:SqlExpress LocalDb can't open fileSqlExpress LocalDb 无法打开文件
【发布时间】:2012-07-29 13:08:40
【问题描述】:

我在 AppData/Local 路径下的目录中有两个 MDF 文件。如果我尝试使用 LocalDb 打开它们。

我的连接字符串是这样的:

数据 Source=(localdb)\v11.0;AttachDbFilename="C:\Users\Anna\AppData\Local\CaseTrakker 软件\CTDynamoDisconnected\CTDynamoDisconnected_Data.mdf";集成 安全=真;连接超时=10

我有一个尝试连接到此 MDF 的示例桌面应用程序,但出现以下异常:

System.Data.SqlClient.SqlException (0x80131904):无法打开数据库 "C:\USERS\ANNA\APPDATA\LOCAL\CASETRAKKER SOFTWARE\CTDYNAMODISCONNECTED\CTDYNAMODISCONNECTED_DATA.MDF”请求 通过登录。登录失败。用户“IMA\Anna”登录失败。

如果我将此文件移动到任何其他位置,或重命名它(甚至是更长的名称),我就可以连接到它。

这个位置或某事似乎有些特殊。

还有一件奇怪的事情:上周它起作用了。据我所知,我的机器或域安全没有任何变化。

我完全不知道还能尝试什么。想法?

【问题讨论】:

    标签: c# ado.net sql-server-express localdb


    【解决方案1】:

    您能否检查一下 LocalDB 实例日志文件中是否有任何有趣的内容?它默认位于%localappdata%\Microsoft\Microsoft SQL Server Local DB\Instances\v11.0 文件夹中。

    【讨论】:

    • 我不确定。我看到了:服务帐户是“IMA\Anna”。这是一条情报信息;无需用户操作。然后,很久以后,我看到:用户“IMA\Anna”登录失败。原因:无法打开明确指定的数据库 'C:\USERS\ANNA\APPDATA\LOCAL\CASETRAKKER SOFTWARE\CTDYNAMODISCONNECTED\CTDYNAMODISCONNECTED_DATA.MDF'。 [客户:]
    • 请记住 - 如果我只是重命名文件,那么它就可以正常工作。因此,这不是文件内部的一些安全设置。
    • 我希望有更多关于它无法打开数据库的原因。它可能像错误命名的 LDF 文件一样简单。您可以尝试运行select * from sys.databases 来查看这个数据库附加的名称是什么(我怀疑主数据库中的元数据有问题)。然后你可以用sp_detach_db 分离它,它应该可以解决问题。下次连接时,AttachDbFileName 将从头开始重新创建元数据。
    • 我正在使用 LocalDb,所以在启动时,数据库没有以任何方式连接。而且,启动时没有 LDF 文件。
    • 你试过运行我提供的命令了吗?如果数据库曾经使用 LocalDB 实例(在您的情况下为 (localdb)\v11.0)连接到,它将在此实例中附加(注册),直到显式删除。这不会阻止您移动文件或将其附加到另一个 LocalDB 实例,但可能会干扰后续的连接尝试。
    【解决方案2】:

    此问题的一个原因是如果您进入 C:\Users\[username] 文件夹并删除 MDF 和 LDF 文件。如果你这样做,那么这类似于对成熟的 SQL Server 做同样的事情。服务器实例仍然认为它有数据库,但它们显然不会工作。

    解决此问题的方法是更改​​连接字符串中的数据库名称,它应该可以正常工作。

    要真正解决问题,请打开 SQL Management Studio,连接到服务器 (LocalDb)\v11.0(可能使用 Windows 身份验证),然后您可以通过这种方式分离这些数据库。

    【讨论】:

      【解决方案3】:

      在我的情况下,我有一段时间使用该数据库并错误地删除了它的 MDF 和 LDF 文件。

      为了解决这个问题,我打开 SQL Management Studio 并使用Windows Authentication 连接到(localdb)\MSSQLLocalDB,然后手动创建了一个新的空数据库,其名称类似于 web.config 连接字符串中的名称

      <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=myDb;Integrated Security=True;" providerName="System.Data.SqlClient" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-09
        • 2018-11-30
        相关资源
        最近更新 更多