1

SQLServerからデータベースをバックアップおよび復元できるWindowsフォームアプリを作成しようとしています。ユーザーは、.bakファイルを保存する場所を選択できます。

私が抱えている問題は、ファイルがまだ存在しない場合、新しいファイルが作成されないことです。したがって、SQL Server内からバックアップを実行し、それをC:\ backup.bakに保存して、それが機能する「パス」としてプログラムに渡す場合、ファイルの場所または名前を変更すると、存在しない場合は、バックアップデバイスを開くことができないというエラーがスローされます。存在しない場合に新しい.bakファイルを作成することは可能ですか?どのようにすればよいですか?

私のコードは現在次のとおりです。

            var dataSource = txtDS.Text;
            var db = txtDbName.Text;
            var path = txtBackup.Text;
            var name = txtName.Text;
            var desc = txtDesc.Text;

            if(File.Exists( path) == true )
            {
                MessageBox.Show("Test");
            }
            else
            {

                Directory.CreateDirectory(@path);
            }

            Server myServer = new Server(dataSource);
            myServer.ConnectionContext.LoginSecure = true;
            myServer.ConnectionContext.Connect();

            var bkpDbLog = new Backup();
            bkpDbLog.Action = BackupActionType.Database;
            bkpDbLog.Database = db;

            bkpDbLog.Devices.AddDevice(path, DeviceType.File);
            bkpDbLog.BackupSetName = name;
            bkpDbLog.BackupSetDescription = desc;

            bkpDbLog.Initialize = true;
            bkpDbLog.Checksum = true;
            bkpDbLog.ContinueAfterError = true;
            bkpDbLog.Incremental = false;
            bkpDbLog.FormatMedia = false;

            bkpDbLog.PercentComplete += CompletionStatusInPercent;

            bkpDbLog.Complete += BackupCompleted;

            bkpDbLog.SqlBackup(myServer);

            if (myServer.ConnectionContext.IsOpen)
                myServer.ConnectionContext.Disconnect();

ありがとう!

4

1 に答える 1

1

Backupここで使用しているオブジェクトに精通していません(私は常に実際のBACKUP DATABASEコマンドを発行します) が、ファイルが存在しない場合と、フォルダーが存在しない場合と、存在しない場合とでは、異なるエラーが発生すると思われます。フォルダへの書き込み権限があります。

ファイルが存在するかどうか、および指定したかどうか.Initialize( と同等WITH INIT) によって、その場合のコマンドの動作が決まります。

フォルダーが存在しない場合は、エラーが発生するため、最初にフォルダー (実際にはパス全体) を作成する必要があります。

フォルダー存在する場合は、SQL Server サービス アカウントにそのフォルダーへの書き込み権限があることを確認する必要があります。ルート ( ) に書き込もうとしましたC:\- ドライブ ルートは特別で、最新バージョンの Windows では聖域として保護されています。のようなフォルダを作成し、C:\backups\その場所にバックアップしてみてください。

これが、通常、SQL Server がインスタンスの指定されたバックアップ フォルダーまたはその他の事前に決定された場所に書き込むことを許可し、必要に応じてそこからファイルを移動/コピーできるようにする理由の一種です。通常、ユーザーが入る可能性のあるフォルダーのアクセス許可を管理する必要はありません。

于 2012-09-27T00:39:00.013 に答える