.bak
SQL Server Express で SQL Server ファイルを復元しています。しかし、データベースを復元した後、コードでそれを使用できません。ファイルが何らかの理由でロックされているようで、唯一の方法は別のフォルダーにコピーすることです。また、.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 共有にあります。