【问题标题】:access denied error while connecting to newly restored MDF database连接到新恢复的 MDF 数据库时访问被拒绝错误
【发布时间】:2013-08-02 08:31:38
【问题描述】:

我正在 SQL Server Express 上恢复一个 SQL Server .bak 文件。但是在恢复数据库后,我无法在我的代码中使用它,似乎文件被锁定了,唯一的方法是将它复制到另一个文件夹,当我尝试复制 .mdf 文件时(使用 Windows 资源管理器)我收到有关管理员权限的警告。我无法使用 C# File.Copy 复制此文件(未授权访问异常,访问被拒绝),这是我的代码:

SqlConnection myConn = new SqlConnection("Server=" + sqlname + ";Integrated security=SSPI;database=master");
string dbname = "tmpDB" + DateTime.Now.Ticks.ToString();
str = "CREATE DATABASE " + dbname + " ON PRIMARY " +
            "(NAME = MyDatabase_Data, " +
            "FILENAME = '" + System.IO.Path.GetDirectoryName(openDialogConvert.FileName) + "\\" + dbname + ".mdf') " +
            "LOG ON (NAME = MyDatabase_Log, " +
            "FILENAME = '" + System.IO.Path.GetDirectoryName(openDialogConvert.FileName) + "\\" + dbname + ".ldf') ";

SqlCommand myCommand = new SqlCommand(str, myConn);

try
{
   myConn.Open();
   myCommand.ExecuteNonQuery();
}
catch (System.Exception ex)
{
   MessageBox.Show(ex.ToString(), "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

myCommand.Dispose();

str = @"RESTORE DATABASE [" + dbname + "] FROM  DISK = N'" + openDialogConvert.FileName + @"' WITH  FILE = 1,  MOVE N'IODB_Data' 
TO N'" + System.IO.Path.GetDirectoryName(openDialogConvert.FileName) + "\\" + dbname + @".mdf',  MOVE N'IODB_Log' 
TO N'" + System.IO.Path.GetDirectoryName(openDialogConvert.FileName) + "\\" + dbname + @".ldf',  REPLACE ";
myCommand = new SqlCommand(str, myConn);
myCommand.ExecuteNonQuery();
myCommand.Dispose();

myConn.Close();

//here I'm going to connect to my newly created & restored database, but I get access denied error
SqlConnection sql = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + System.IO.Path.GetDirectoryName(openDialogConvert.FileName) + @"\" + dbname + ".mdf  ;Integrated Security=True");
sql.Open();

这里出了什么问题?我想在恢复数据库后立即连接到新恢复的数据库。

当我尝试连接到我新创建和恢复的.mdf 时出现以下错误:

无法打开物理文件“D:\9 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug\tmpDB635110451805001328.mdf”。操作系统错误 5:“5(拒绝访问。)”。

尝试为文件 D:\9 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug\tmpDB635110451805001328.mdf 附加自动命名数据库失败。存在同名数据库,或指定文件无法打开,或位于 UNC 共享上。

【问题讨论】:

  • 我怀疑它可能已经附加了。你可以使用 new SqlConnection("Server=" + sqlname + ";Integrated security=SSPI;database=" + dbname + ");
  • Ummm...您是否正在尝试打开 SQL Server 使用的 mdf 文件?
  • 感谢乔纳森,它成功了!您可以在答案中发表您的评论,以便我可以将其标记为已回答吗?

标签: c# sql-server restore access-denied


【解决方案1】:

我怀疑它可能已经附加了。

您可以使用以下方式连接:

new SqlConnection("Server=" + sqlname + 
                  ";Integrated security=SSPI;" + 
                  "database=" + dbname);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多