3

我在将数据库附加DBName.mdf到网络 SQL Server 时遇到问题。管理员可以手动附加数据库,但如果我尝试,我会收到以下错误消息。

无法升级数据库“DBName”,因为它是只读的、具有只读文件或用户无权修改某些文件。使数据库或文件可写,然后重新运行恢复。(Microsoft SQL Server,错误:3415)

这是我的代码:

System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
conn.ConnectionString = @"Server=" + SQLServerName + ";database=master;User ID=" + UserName + ";Pwd=" + Password; ;

try
{
    conn.Open();

    System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand("CREATE DATABASE DBName ON ( FILENAME = '" + @"C:\DBName.mdf" + "' ), ( FILENAME = '" + @"C:\DBName_log.ldf" + "' ) FOR ATTACH", conn);
    com.ExecuteScalar();

}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    conn.Close();
}

这是 SQL Server 的详细信息

- Product - Microsoft SQL Server Express Edition (64-bit)
- Version - 11.0.2218.0

我可以很好地创建一个新数据库,但不能附加现有数据库。我在这里想念什么?

任何帮助将不胜感激。

4

4 回答 4

15

我弄清楚了问题所在。

此链接有助于找出问题。 http://www.sqlservercentral.com/Forums/FindPost1367859.aspx

运行 SQL 服务的用户没有对该文件夹的完全访问权限。我给了用户完全许可,一切正常。

于 2013-04-11T18:45:31.147 回答
7

我尝试通过 SQL Server Management Studio 附加时遇到了同样的错误。
以管理员身份运行 SQL Server Management Studio 为我解决了这个问题。从这里收集的信息http://www.nickyvv.com/2013/02/database-databasename-cannot-be.html

于 2014-11-02T12:53:39.237 回答
1

我也遇到了类似的问题,我使用 Butters 和 pblack 上面列出的两种方法解决了它。总结起来就是:

  • 转到系统服务并找到 SQL Server 数据库服务。
  • 右键单击服务并选择属性
  • 转到登录选项卡
  • 如果您的服务中的“登录身份”用户是用户帐户,请确保该用户帐户对该文件夹具有完全控制权。

  • 如果您服务中的“登录身份”用户是“网络服务”或“本地系统”,则这些帐户应该已经具有访问权限,但请继续添加它们并赋予它们完全控制权。

  • 最后,使用管理权限运行 SQL Server 管理工作室

于 2014-12-02T13:18:41.130 回答
0

我在使用 T-SQL 脚本时也遇到了类似的情况,但我通过 SSMS 选择了另一种方式。以下是一些对您通过 SQL Server Management Studio 附加 SQL MDF 文件非常有帮助的简单步骤。

  1. 通过开始按钮->所有程序->SQL Server XXXX->SQL Server Management Studio
  2. 登录进去
  3. 选择对象资源管理器登记的数据库
  4. 然后右键单击它并选择附加数据库
  5. 数据库附件窗口出现在屏幕上,然后单击添加按钮
  6. 然后您需要选择要附加的 MDF 文件,然后单击确定
  7. 确认并单击确定
  8. 数据库已成功附加。您可以在数据库列表中结帐。
于 2014-04-25T06:01:13.200 回答