代码改变世界

c# 备份还原 例子

2009-09-23 09:59  曾祥展  阅读(480)  评论(1编辑  收藏
//记得加 folderBrowserDialog1   openFileDialog1      控件
using System.Data.SqlClient;   //连接数据库   公共变量
namespace WindowsApplication1.GoodMenhod
{
    
class getSqlConnection
    { 
        
string sql = "Data Source=win7-pc;database=Kc;uid=sa;pwd=sa";
        SqlConnection conn; 
      
        
public SqlConnection GetCon()
        {
           conn 
= new SqlConnection(sql);
           conn.Open();
           
return conn;
        }
     
    }
}


using System.Data.SqlClient;
using WindowsApplication1.GoodMenhod;  //引用命名空间
namespace WindowsApplication1
{
    
public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent();
        }
        
private void button1_Click(object sender, EventArgs e)  //打开 备份路径
        {
            
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                txtPath.Text 
= folderBrowserDialog1.SelectedPath.ToString();
            }
        }
        
private void button2_Click(object sender, EventArgs e)  //备份名称  保存 
        {
            
try
            {
                
if (txtPath.Text != "" )
                {
                    getSqlConnection geCon 
= new getSqlConnection();
                    SqlConnection con 
= geCon.GetCon();
                    
string strBacl = "backup database Kc to disk='" + txtPath.Text.Trim() + "\\" + txtName.Text.Trim() + ".bak'";
                    SqlCommand Cmd 
= new SqlCommand(strBacl, con);
                    
if (Cmd.ExecuteNonQuery() != 0)
                    {
                        MessageBox.Show(
"数据备份成功!""提示框", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        
this.Close();
                    }
                    
else
                    {
                        MessageBox.Show(
"数据备份失败!""提示框", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                
else
                {
                    MessageBox.Show(
"请填写备份的正确位置及文件名!""提示框", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
// end 
            }
            
catch (Exception ee)
            {
                MessageBox.Show(ee.Message.ToString());
            }

        }
    }
}


   
private void button3_Click(object sender, EventArgs e)  //打开 将要还原的文件
        {
            openFileDialog1.FilterIndex 
= 0;
            openFileDialog1.FileName 
= "";
            openFileDialog1.Filter 
= "txt files (*.bak)|*.bak|All files (*.*)|*.*";

            
if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textPaht.Text 
= openFileDialog1.FileName.ToString();
            }
        }
 
private void button4_Click(object sender, EventArgs e)   //还原
        {
             
if (textPaht.Text != "")
            {
                getSqlConnection geCon 
= new getSqlConnection();
                SqlConnection con 
= geCon.GetCon();
                
if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
                
//连接的数据库是master,所以要初始化新的连接字符串
                string DateStr = "Data Source=win7-pc;Database=master;User id=sa;PWD=sa";
                SqlConnection conn 
= new SqlConnection(DateStr);
                conn.Open();
                
//-------------------杀掉所有连接 db_CSManage 数据库的进程--------------
               
// string sql = " SELECT spid FROM master..sysprocesses WHERE dbid=db_id('" + strDBName + "')";
                string strSQL = "select spid from master..sysprocesses where dbid=db_id( 'Kc') ";//读取连接当前数据库的进程
                SqlDataAdapter Da = new SqlDataAdapter(strSQL, conn);
                DataTable spidTable 
= new DataTable();
                Da.Fill(spidTable);
                SqlCommand Cmd 
= new SqlCommand();
                Cmd.CommandType 
= CommandType.Text;
                Cmd.Connection 
= conn;
                
for (int iRow = 0; iRow <= spidTable.Rows.Count - 1; iRow++)
                {
                    Cmd.CommandText 
= "kill " + spidTable.Rows[iRow][0].ToString();   //强行关闭用户进程 
                    Cmd.ExecuteNonQuery();
                }
                conn.Close();
                conn.Dispose();
                
//--------------------------------------------------------------------
                SqlConnection sqlcon = new SqlConnection(DateStr);
                sqlcon.Open();
                SqlCommand sqlCmd 
= new SqlCommand("backup database Kc to disk='" + textPaht.Text.Trim() + "' restore database Kc from disk='" + textPaht.Text.Trim() + "'", sqlcon);
                sqlCmd.ExecuteNonQuery();
                sqlCmd.Dispose();
                sqlcon.Close();
                sqlcon.Dispose();
                MessageBox.Show(
"数据还原成功!""提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                MessageBox.Show(
"为了必免数据丢失,在数据库还原后将关闭整个系统。");
                Application.Exit();
            }
            
else
            {
                MessageBox.Show(
"请选择备份文件!""提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }