MSSQL、C# 、Winform、ASP.NET - 数据库备份与还原模块

数据库备份还原类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//应用相应的命名空间
using System.Windows.Forms;
using System.Collections;
using System.IO;
using System.Data;
using System.Data.SqlClient;

namespace canyinxt.Command
{
    public static class BacupDatabase
    {
        static string connectionString = "Data Source=(local);Initial Catalog=master;integrated security = true";
        static SqlConnection conn = new SqlConnection(connectionString);

        #region 备份指定的数据库文件
        /// <summary>
        /// 备份指定的数据库文件
        /// </summary>
        /// <param name="DBName">备份名称要与数据库中的数据库名称相同</param>
        /// <param name="databasename">要还原的数据库(包含要备份的文件名)</param>
        /// <returns></returns>
        public static bool BackUpDataBase(string DBName, string databasefile)
        {
            if (!File.Exists(databasefile))
            {

            }
            //还原的数据库MyDataBase
            string sql = "BACKUP DATABASE " + "" + DBName + "" + " TO DISK = ‘" + databasefile + ".bak‘ ";
            conn.Open();
            SqlCommand comm = new SqlCommand(sql, conn);
            comm.CommandType = CommandType.Text;
            try
            {
                comm.ExecuteNonQuery();
            }
            catch (Exception err)
            {
                string str = err.Message;
                conn.Close();

                return false;
            }

            conn.Close();//关闭数据库连接
            return true;
        }
        #endregion

        //以下是还原数据库,稍微麻烦些,要关闭所有与当前数据库相连的连接
        #region 还原数据库
        /// <summary>
        /// 还原数据库
        /// </summary>
        /// <param name="DBName">要还原数据库名称(此名称要和备份时候的相同)</param>
        /// <param name="backfile">数据库文件路径(加名称)</param>
        /// <returns></returns>
        public static bool RestoreDatabase(string DBName, string backfile)
        {
            ///杀死原来所有的数据库连接进程
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "Data Source=(local);Initial Catalog=master;integrated security = true";
            conn.Open();
            string sql = "SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name=‘" + "" + DBName + "" + "‘";
            SqlCommand cmd1 = new SqlCommand(sql, conn);
            SqlDataReader dr;
            ArrayList list = new ArrayList();
            try
            {
                dr = cmd1.ExecuteReader();
                while (dr.Read())
                {
                    list.Add(dr.GetInt16(0));
                }
                dr.Close();
            }
            catch (SqlException eee)
            {
                MessageBox.Show(eee.ToString());
            }
            finally
            {
                conn.Close();
            }
            //MessageBox.Show(list.Count.ToString());
            for (int i = 0; i < list.Count; i++)
            {
                conn.Open();
                cmd1 = new SqlCommand(string.Format("KILL {0}", list[i].ToString()), conn);
                cmd1.ExecuteNonQuery();
                conn.Close();
                // MessageBox.Show("系统已经清除的数据库线程: " + list[i].ToString() + "\r\n正在还原数据库!");
            }
            MessageBox.Show("系统已经清除的数据库线程: " + list.Count.ToString() + "\r\n正在还原数据库!");
            //这里一定要是master数据库,而不能是要还原的数据库,因为这样便变成了有其它进程
            //占用了数据库。
            string constr = @"Data Source=(local);Initial Catalog=master;integrated security = true";
            string database = DBName;
            string path = backfile;
            string BACKUP = String.Format("RESTORE DATABASE {0} FROM DISK = ‘{1}‘ WITH REPLACE", database, path);
            SqlConnection con = new SqlConnection(constr);
            SqlCommand cmd = new SqlCommand(BACKUP, con);
            con.Open();
            try
            {
                cmd.ExecuteNonQuery();
                MessageBox.Show("还原成功,点击退出系统,请重新登录!");
                Application.Exit();
                return true;
            }
            catch (SqlException ee)
            {
                //throw(ee);

                //MessageBox.Show("还原失败");

                MessageBox.Show(ee.ToString() + "还原失败!", "还原失败!");
                return false;

            }
            finally
            {
                con.Close();
            }
        }
        #endregion
    }
}

备份方法的使用:

调用 Command 文件夹下的 BacupDatabase 类下的 BackUpDataBase(备份方法):

Command.BacupDatabase.BackUpDataBase("DB_CYMS", BackupPath + @"\DB_CYMS")

还原方法的使用:

调用 Command 文件夹下的 BacupDatabase 类下的 RestoreDatabase(还原方法):

Command.BacupDatabase.RestoreDatabase("DB_CYMS", RestoreDB)

参考:http://www.cnblogs.com/enjoyprogram/p/3177693.html

时间: 2024-08-06 20:31:54

MSSQL、C# 、Winform、ASP.NET - 数据库备份与还原模块的相关文章

在ASP.NET中备份和还原数据库

昨天看了<C#项目实录>中的进销存管理系统,和其他书里讲的案例一样,无非也就是数据库增删查改,但是这个进销存系统中有一个备份和还原数据库的功能,蛮有兴趣的,看了一下代码,原来如此,也就是通过SQL语句来进行备份和还原数据库,SQL语句如下: Sql代码   -- 备份数据库 backup database db_CSManage to disk='c:\backup.bak' -- 还原数据库,必须先备份该数据库的日志文件到原先的备份文件中 backup log db_CSManage to 

SQL Server 数据库备份与还原

1.相同SQL Server版本(2008为例)之间数据库备份与还原 (1)数据库备份 相同SQL Server服务器版本之间数据库的备份还原操作相对来说比较简单. 首先找到需要备份的数据库实例,[右键]->[任务]->[备份...],界面下边选择备份路径,点击确定,备份成功后即可在选择的备份路径下找到后缀名为.bak的备份文件. (2)数据库还原 对于需要还原的.bak数据库文件,一般会先拷贝到 C:\Program Files\Microsoft SQL Server\MSSQL10.MS

第三章 数据库备份和还原

一.数据库恢复模式 1.完整:能够让数据库恢复到出现故障的时间点和指定时间点(主要是日志文件完 整备份) 2.大容量日志:数据库日志不记录对数据修改的时间(即指定的时间点)效率高只 能通过日志恢复到故障点 3.简单:对事务日志不活跃的逻辑日志文件覆盖重复利用(日志写满后覆盖完成的 提交的事务日志)不能利用日志还原数据库,只能利用完整数据库文件恢 复 1)简单恢复模式 数据库备份和还原策略 数据小 数据变化不大 数据库不能恢复到出现故障的时间点(重复擦写日志文件) 完整数据库备份  完整的数据库备

Mysql数据库备份和还原常用的命令

Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下面就是操作的常用命令. 一.备份命令 1.备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename>backupfile.sql 2.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有

MySQL数据库备份与还原

备份数据库 1.使用mysqldump命令备份 备份一个数据库:mysqldump -u 用户名 -p密码 数据库名 [表名1,表名2...]>备份文件路径及名字.sql 如果没有表名,则备份整个数据库 eg: mysql -u root -p test studentinfo >D:\test.sql 备份多个数据库:mysqldump -u 用户名 -p --databases 数据库1,数据库2...  >  备份文件路径及名字.sql 备份所有数据库:mysqldump -u 用

数据库备份与还原的过程中介质集有2个介质簇,但只提供了1个。必须提供所有成员

在对数据库备份与还原的过程中,我遇到一个问题"介质集有2个介质簇,但只提供了1个.必须提供所有成员",下面详细的介绍一下遇到问题的经过与问题解决的方法! 一.备份与还原遇到的问题描述与解决方法: 前两天用户测试我们做的评教系统小软件,有点问题我们过去看了看,想将他们的测试数据备份一下,以便我们修改软件测试使用. 我是这样备份的,数据库备份默认有一个路径:C\...,而我又添加了一个新路径,没将默认路径删除,而是选中新路径,我就理所当然的认为数据库中的数据备份到我新加的路径下了. 今天还

[转]MySQL数据库备份和还原的常用命令小结

MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下: 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 备份MySQL数据库为带删除表的格式备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库. mysqldump ---add-drop-table -uusername -ppassword databasena

MySQL数据库备份和还原的常用命令小结

MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下: 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 备份MySQL数据库为带删除表的格式备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库. mysqldump ---add-drop-table -uusername -ppassword databasena

c# .NET 进行数据库备份和还原

本文主要内容来源stswordman的介绍,开发环境为10,数据库为08R2 原文地址http://www.cnblogs.com/stswordman/archive/2006/08/06/469002.html. //////备份方法///SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;"); SqlCommand cmdBK = new SqlComma