我正在SQL Server Express上恢复SQL Server .bak
文件。但是在恢复数据库后,我无法在我的代码中使用它,似乎文件以某种方式被锁定,唯一的方法是将其复制到另一个文件夹,当我尝试复制.mdf
文件时(使用Windows)资源管理器)我收到有关管理员权限的警告。我无法使用C#File.Copy
复制此文件(unauthorizedaccessexception,访问被拒绝),这是我的代码:
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共享上。
答案 0 :(得分:1)
我怀疑它可能已经附上了。
可以使用以下方式连接:
new SqlConnection("Server=" + sqlname +
";Integrated security=SSPI;" +
"database=" + dbname);