惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
C
Check Point Blog
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG

博客园 - icwin

在LINUX下进行C语言编程所需要的基础知识 路由器的“心脏”技术 软件费用的组成 如何利用C#创建和调用DLL收藏 如何利用C#创建和调用DLL | C#中创建和使用资源动态链接库收藏 Nobi's StatusChart - 野比的状态波形图控件 C#调用API的一些基础(希望有人用的上) 如何合理创建c#对象 MD5加密简介以及C#下的操作实现 【转】C#项目打包,并自动安装SQL数据库 手把手教你用C#打包应用程序(安装程序)【卸载模块已添加】 C#.NET中存取数据库入门贴(ADO.NET) http://bbs.bccn.net/ .NET开发中的一些小技巧收藏 C#读取Excel数据收藏 C#文件夹和文件的常见操作收藏 C#实现重启应用程序收藏 C#实现SQL数据库备份与恢复
C#备份和还原SQL数据库
icwin · 2008-09-06 · via 博客园 - icwin

C#备份和还原SQL数据库

Posted on 2007-03-18 13:56 星际 阅读(529) 评论(0)  编辑 收藏 所属分类: 网摘

using System;
using System.Data;
using System.Data.SqlClient;

namespace bachupsqlserver
{
    /// <summary>
    /// 备份和还原sql server 2000数据库,在asp.net中文正式版和sql server 2000系统上通过
    /// </summary>
    public class BackupData
    {
        private SqlConnection conn;
        public BackupData()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            string sql="data source=localhost;initial catalog=master;password=;persist security info=True;user id=sa;workstation id=TOPS03496;packet size=4096";//注意默认数据库不要和恢复的数据库同名

            init(sql);
        }

        /// <summary>
        /// 备份数据库
        /// </summary>
        /// <param name="databasename">要备份的数据源名称</param>
        /// <param name="backuptodatabase">备份到的数据库文件名称及路径</param>
        /// <returns></returns>
        public bool BackUpDataBase(string databasename,string backuptodatabase)
        {
            string procname;
            string name=databasename+DateTime.Now.Year.ToString()+DateTime.Now.Month.ToString()+DateTime.Now.Date.Day.ToString()+DateTime.Now.Minute.ToString();
            string sql;

            conn.Open();        //打开数据库连接

            //删除逻辑备份设备,但不会删掉备份的数据库文件
            procname="sp_dropdevice";
            SqlCommand sqlcmd1=new SqlCommand(procname,conn);
            sqlcmd1.CommandType =CommandType.StoredProcedure;

            SqlParameter sqlpar=new SqlParameter();
            sqlpar=sqlcmd1.Parameters.Add("@logicalname",SqlDbType.VarChar,20);
            sqlpar.Direction =ParameterDirection.Input;
            sqlpar.Value =databasename;

            try        //如果逻辑设备不存在,略去错误
            {
                sqlcmd1.ExecuteNonQuery();
            }
            catch
            {
            }

            //创建逻辑备份设备
            procname="sp_addumpdevice";
            SqlCommand sqlcmd2=new SqlCommand(procname,conn);
            sqlcmd2.CommandType =CommandType.StoredProcedure;

            sqlpar=sqlcmd2.Parameters.Add("@devtype",SqlDbType.VarChar,20);
            sqlpar.Direction =ParameterDirection.Input;
            sqlpar.Value ="disk";

            
            sqlpar=sqlcmd2.Parameters.Add("@logicalname",SqlDbType.VarChar,20);//逻辑设备名
            sqlpar.Direction =ParameterDirection.Input;
            sqlpar.Value =databasename;

            sqlpar=sqlcmd2.Parameters.Add("@physicalname",SqlDbType.NVarChar,260);//物理设备名
            sqlpar.Direction =ParameterDirection.Input;
            sqlpar.Value =backuptodatabase+name+".bak";

            
            try
            {
                int i=sqlcmd2.ExecuteNonQuery();
            }
            catch(Exception err)
            {
                string str=err.Message;
            }

            //备份数据库到指定的数据库文件(完全备份)
            sql="BACKUP DATABASE "+databasename +" TO "+databasename +" WITH INIT";
            SqlCommand sqlcmd3=new SqlCommand(sql,conn);
            sqlcmd3.CommandType =CommandType.Text;
            try
            {
                sqlcmd3.ExecuteNonQuery();
            }
            catch(Exception err)
            {
                string str=err.Message ;
                conn.Close();

                return false;
            }

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

        }

        /// <summary>
        /// 还原指定的数据库文件
        /// </summary>
        /// <param name="databasename">要还原的数据库</param>
        /// <param name="databasefile">数据库备份文件及路径</param>
        /// <returns></returns>
        public bool RestoreDataBase(string databasename,string databasefile )
        {

            //还原指定的数据库文件
            string sql="RESTORE DATABASE "+databasename +" from DISK = '"+databasefile +"' ";
            SqlCommand sqlcmd=new SqlCommand(sql,conn);
            sqlcmd.CommandType =CommandType.Text;

            conn.Open();

            try
            {
                sqlcmd.ExecuteNonQuery();
            }
            catch(Exception err)
            {
                string str=err.Message ;
                conn.Close();

                return false;
            }

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

        /// <summary>
        /// 初始化数据库的连接
        /// </summary>
        /// <param name="strconn"></param>
        private void init(string strconn)
        {
            conn=new SqlConnection(strconn);

        }
    }
}