• [.NET开发] C#实现的SQL备份与还原功能示例


    本文实例讲述了C#实现的SQL备份与还原功能。分享给大家供大家参考,具体如下:

    //记得加 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);

    }

    }

    复制代码

    (编辑:雷林鹏 来源:网络)

  • 相关阅读:
    CH02 FPGA设计Verilog基础笔记(二)
    同一个按键短按与长按的区别触发
    树莓派 -- 输入设备驱动 (key) 续2: 转载 Setting up a GPIO-Button “keyboard” on a Raspberry Pi
    树莓派 -- 输入设备驱动 (key) 续1
    树莓派 -- 输入设备驱动 (key)
    树莓派 -- 按键 (key)使用BCM2835 gpio library
    leds-gpio driver 续1
    leds-gpio driver
    使用CSDN-markdown编辑器
    树莓派
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9242198.html
Copyright © 2020-2023  润新知