2016-11-22 40 views
0

SQL ServerデータベースをバックアップするWindowsフォームアプリケーションを作成しています。私は次のコードを使用しています:C#でSQL Serverバックアップを自動化

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace SQL_Server_DB_Backup_and_Restore 
{ 
    public partial class Form1 : Form 
    { 
     private SqlConnection conn; 
     private SqlCommand command; 
     private SqlDataReader reader; 
     string sql = ""; 
     string connectionString = ""; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btnBrowse_Click(object sender, EventArgs e) 
     { 
      FolderBrowserDialog dlg = new FolderBrowserDialog(); 

      if(dlg.ShowDialog()==DialogResult.OK) 
      { 
       txtBackupFileLocation.Text = dlg.SelectedPath; 
      } 
     } 

     private void btnConnect_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       connectionString = "Data Source= " + txtDataSource.Text + "; User Id=" + txtUserId.Text + "; Password=" + txtPassword.Text + ""; 
       conn = new SqlConnection(connectionString); 
       conn.Open(); 
       //sql = "EXEC sp_databases"; 
       sql = "SELECT * FROM sys.databases d WHERE d.database_id>4"; 
       command = new SqlCommand(sql, conn); 
       reader = command.ExecuteReader(); 
       cmbDatabases.Items.Clear(); 

       while(reader.Read()) 
       { 
        cmbDatabases.Items.Add(reader[0].ToString()); 
       } 

       txtDataSource.Enabled = false; 
       txtUserId.Enabled = false; 
       txtPassword.Enabled = false; 
       btnConnect.Enabled = false; 
       btnDisconnect.Enabled = true; 

       btnBackup.Enabled = true; 
       btnRestore.Enabled = true; 
       cmbDatabases.Enabled = true; 
      } 

      catch(Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

     private void btnDisconnect_Click(object sender, EventArgs e) 
     { 
      txtDataSource.Enabled = true; 
      txtUserId.Enabled = true; 
      txtPassword.Enabled = true; 
      cmbDatabases.Enabled = false; 
      btnBackup.Enabled = false; 
      btnRestore.Enabled = false; 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      btnDisconnect.Enabled = false; 
      cmbDatabases.Enabled = false; 
      btnBackup.Enabled = false; 
      btnRestore.Enabled = false; 
     } 

     private void btnBackup_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       if(cmbDatabases.Text.CompareTo("")==0) 
       { 
        MessageBox.Show("Please select a database"); 
        return; 
       } 
       conn = new SqlConnection(connectionString); 
       conn.Open(); 
       sql = "BACKUP DATABASE " + cmbDatabases.Text + " TO DISK = '" + txtBackupFileLocation.Text + "\\" + cmbDatabases.Text + "-" + DateTime.Now.Ticks.ToString() + ".bak'"; 
       command = new SqlCommand(sql, conn); 
       command.ExecuteNonQuery(); 
       MessageBox.Show("Database backup is completed successfully"); 
      } 
      catch(Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

今私はバックアップを取るためにボタンを押す必要があります。アプリケーションを毎週バックアップするようにプロセスを自動化するにはどうすればよいですか?

+0

Windowsスケジューラは、実行したいときにプログラムを実行できます。 exeを選択して実行時間をスケジュールするだけです。この場合、フォームアプリケーションは必要ありません。コンソールアプリケーションがそれを行います。メインメソッドでメソッドを呼び出します。 – Badiparmagi

+0

スケジュールされたタスクをプログラムで追加することに関するこの質問は役に立ちます。 http://stackoverflow.com/questions/7394806/creating-scheduled-tasks – scotru

答えて

1

MS SQL Serverには、データベースのバックアップを自動化/スケジュール設定する機能があります。オブジェクトエクスプローラで

管理 - >保守計画 - >新規保守計画
および保守計画タスクで、データベースタスクのバックアップをドラッグします。
上のカレンダーアイコンをクリックして、バックアップの時刻を設定します。これは上記のSQL Server 2008用です。

関連する問題