0

次のコードを使用して BAK ファイルを MDF ファイルに復元しています。最初にデータベースを作成し、次に BAK ファイルを使用して復元しようとしましたが、いくつかのエラーが発生しました: ファイルを開くダイアログを使用して BAK ファイルを選択します。

            openDialogConvert.ShowDialog();
        RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");
        String[] instances = (String[])rk.GetValue("InstalledInstances");
        string sqlname = "";
        if (instances.Length > 0)
        {
            foreach (String element in instances)
            {
                if (element == "MSSQLSERVER")
                    sqlname = System.Environment.MachineName;
                else
                    sqlname = System.Environment.MachineName + @"\" + element;

            }
        }


        String str;
        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 = '" + Environment.CurrentDirectory + "\\" + dbname + ".mdf') " +
            "LOG ON (NAME = MyDatabase_Log, " +
            "FILENAME = '" + Environment.CurrentDirectory + "\\" + dbname + ".ldf') ";

        SqlCommand myCommand = new SqlCommand(str, myConn);
        try
        {
            myConn.Open();
            myCommand.ExecuteNonQuery();
            MessageBox.Show("DataBase is Created Successfully", "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        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  MOVE N'IODB_Data' 
TO N'" + Environment.CurrentDirectory + @"\\" + dbname + @".mdf',  MOVE N'IODB_Log' 
TO N'" + Environment.CurrentDirectory + @"\\" + dbname + @".ldf',  REPLACE ";
            myCommand = new SqlCommand(str, myConn);
            myCommand.ExecuteNonQuery();
            myCommand.Dispose();
            myConn.Close();

新しい (空の) データベースは正常に作成されましたが、この新しく作成されたデータベースで BAK ファイルを復元しようとすると、奇妙なエラーが発生します。

上記のコードを使用すると、次のエラーが発生します。

「D:\7 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug」で「RestoreContainer::ValidateTargetForCreation」を試行中に、オペレーティング システムからエラー「32 (このエラーのテキストを取得できませんでした。理由: 15105)」が返されました。 \tmpDB635107927412887254.mdf'.

ファイル 'IODB_Data' を 'D:\7 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug\tmpDB635107927412887254.mdf' に復元できません。WITH MOVE を使用して、ファイルの有効な場所を特定します。

「D:\7 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug」で「RestoreContainer::ValidateTargetForCreation」を試行中に、オペレーティング システムからエラー「32 (このエラーのテキストを取得できませんでした。理由: 15105)」が返されました。 \tmpDB635107927412887254.ldf'.

ファイル 'IODB_Log' を 'D:\7 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug\tmpDB635107927412887254.ldf' に復元できません。WITH MOVE を使用して、ファイルの有効な場所を特定します。

RESTORE ステートメントの計画中に問題が特定されました。前のメッセージに詳細が記載されています。

RESTORE DATABASE が異常終了しています。

しかし、コマンドの最後に「GO」を挿入すると、次のエラーが表示されます: Incorrect syntax near GO

ここで何がうまくいかないのですか?もちろん、SQL Server Management Studio を使用して復元操作を正常にテストし、BAK ファイルの正しい論理名を見つけました (実際、MSSMS からスクリプトをコピーしました)。

4

0 に答える 0