C# winfrom数据库备份与恢复

C#  winfrom数据库备份与恢复

通过C# winfrom来对SQL数据库进行数据库的备份和还原
技术分享
图1
技术分享
图2
 //设置保存的路径
        private void btnBaoCun_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog myFolderBrowserDialog = new FolderBrowserDialog();

            //设置根目录在桌面;
            myFolderBrowserDialog.RootFolder = System.Environment.SpecialFolder.Desktop;

            //设置当前选择的路径
            myFolderBrowserDialog.SelectedPath = "C:";

            //允许在对话框中包括一个新建目录的按钮
            myFolderBrowserDialog.ShowNewFolderButton = true;

            //设置对话框的说明信息
            myFolderBrowserDialog.Description = "请选择输出目录";

            if (myFolderBrowserDialog.ShowDialog() == DialogResult.OK)
            {//确认是否保存
                string strLuJing = myFolderBrowserDialog.SelectedPath;//获取路径
                txtBaoCunBeiFen.Text = strLuJing;//赋值给文本显示
            }
        }
        /// <summary>
        /// 创建连接字符串
        /// </summary>
        /// <param name="straddress">连接地址</param>
        /// <param name="SQLname">备份的数据库名称</param>
        /// <returns></returns>
        private static SqlConnection GetConn(string straddress,string SQLname)
        {//创建连接字符串与SQL连接,也可以直接调用DAL中的连接
            SqlConnection conn = new SqlConnection(@"Data Source=" + straddress + ";Initial Catalog=" + SQLname + ";User ID=sa;Password=123");
            return conn;
        }
        private void btnBaoCunBeiFen_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("是否备份数据", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                if (txtBaoCunBeiFen.Text.ToString() != "")
                {
                    //设置连接字符串
                    SqlConnection conn = GetConn("10.20.0.25:14334","zbwx");
                    //实例化SQL可执行的存储过程
                    SqlCommand cmdBK = new SqlCommand();
                    //SQL文本
                    cmdBK.CommandType = CommandType.Text;
                    cmdBK.Connection = conn;
                   // DateTime dtm = new DateTime();
                    string strRiQi = DateTime.Now.Year.ToString() + (DateTime.Now.Month.ToString().Length < 2 ? "0" + DateTime.Now.Month.ToString() : DateTime.Now.Month.ToString()) + (DateTime.Now.Day.ToString().Length < 2 ? "0" + DateTime.Now.Day.ToString() : DateTime.Now.Day.ToString()) + (DateTime.Now.Hour.ToString().Length < 2 ? "0" + DateTime.Now.Hour.ToString() : DateTime.Now.Hour.ToString()) + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
                    cmdBK.CommandText = @"backup database zbwx to disk='" + txtBaoCunBeiFen.Text + "\\" + strRiQi + "" + ".bak'";
                    try
                    {
                        //进入SQL
                        conn.Open();
                        //返回影响行数
                        cmdBK.ExecuteNonQuery();
                        MessageBox.Show("备份成功!");
                        this.Dispose();//释放资源
                        this.Close();//关闭
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("备份失败");
                    }
                    finally
                    {
                        conn.Close();//关闭与SQL的连接
                    }
                }
                else
                {
                    MessageBox.Show("请选择保存路径!");
                }
            }
        }

        private void btnHuanYuan_Click(object sender, EventArgs e)
        {
            //文件控件
            OpenFileDialog filename = new OpenFileDialog();
            //获取路径
            filename.InitialDirectory = Application.StartupPath;
            //设置可打开的文件格式
            filename.Filter = "All files (*.*)|*.bak";
            filename.FilterIndex = 2;
            //是否还原当前路径
            filename.RestoreDirectory = true;
            if (filename.ShowDialog() == DialogResult.OK)
            {
                //处理路径
                string path = filename.FileName.ToString();
                string Name = path.Substring(path.LastIndexOf("\\") + 1);
                txtBaoCunWenJian.Text = path;
            }
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("是否还原数据", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                if (txtBaoCunWenJian.Text.ToString() != "")
                {
                    string databasefile=txtBaoCunWenJian.Text;
                    MessageBox.Show(databasefile);
                    if (RestoreDataBase("zbwx", databasefile))
                    {
                        MessageBox.Show("还原成功!");
                    }
                    else {
                        MessageBox.Show("还原失败!");
                    }
                    this.Dispose();
                    this.Close();
                }
                else
                {
                    MessageBox.Show("请选择文件路径!");
                }
            }
        }

        private void frmShuJuBeiFenYuHuiFu_Load(object sender, EventArgs e)
        {
            string strMoRen = System.Environment.CurrentDirectory;
            txtBaoCunBeiFen.Text = strMoRen;
        }

        
        SqlConnection constring = new SqlConnection("Data Source=(local);Initial Catalog=master;User ID=sa;Password=123");
        /// <summary>
        /// 还原数据库
        /// </summary>
        /// <param name="databasename">需要还原数据库的名称</param>
        /// <param name="databasefile">文件路径</param>
        /// <returns></returns>
        public bool RestoreDataBase(string databasename,string databasefile)
        {
           // SqlConnection constring = new SqlConnection("Data Source=(local);Initial Catalog=master;User ID=sa;Password=123");
            string sql = " RESTORE DATABASE " + databasename + " from DISK ='" + databasefile + "'" + " WITH REPLACE";//数据库名称和路径 WITH REPLACE是去除日志文件
            SqlCommand sqlcmd = new SqlCommand(sql, constring);
            sqlcmd.CommandType = CommandType.Text;
            
            try {
                //开始
                constring.Open();
                sqlcmd.ExecuteNonQuery();
            }catch(Exception ex)
            {
                string str = ex.Message;
                constring.Close();
                return false;
            }
            constring.Close();//结束
            return true;
        }

该资料仅供学习,禁止商业用途

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。