连接到新恢复的MDF数据库时出现拒绝访问错误

本文关键字:数据库 错误 拒绝访问 MDF 新恢复 恢复 连接 | 更新日期: 2023-09-27 18:25:59

我正在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共享上。

连接到新恢复的MDF数据库时出现拒绝访问错误

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

你能用连接吗

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