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

推荐订阅源

云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
月光博客
月光博客
T
Tailwind CSS Blog
小众软件
小众软件
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
B
Blog RSS Feed
博客园 - 司徒正美
A
About on SuperTechFans
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 聂微东
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
博客园 - Franky
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 半克拉鹅卵石

strong name in gac sql积累 一些有用的bat命令 js获取某年某月天数 计算经纬度距离 正则表达式分割数组 修改系统时间 转贴:Lucene的评分(score)机制 搜索引擎CACHE策略研究 DllImport lucene.net 2.0在多线程同步下似乎有问题 Lucene Hack之通过缩小搜索结果集来提升性能 lucene2.0与2.3区别 asp.net常用函数 不走寻常路,设计asp.net应用程序的七大绝招 获取sql server服务器名称 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复 C#中下载Excel文件(其实就是将Excel文件从一个路径Copy到另一个路径) Asp.net中操作Excel的权限解决方法
数据库备份
半克拉鹅卵石 · 2006-05-19 · via 博客园 - 半克拉鹅卵石

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);   
    
                  }
   
          }
   
  }
   

参见在C#中运用SQLDMO备份和恢复Microsoft   SQL   Server数据库  
  http://dev.csdn.net/develop/article/28/28564.shtm  
  当不使用要恢复的数据库时以上方法可行,但当你使用了数据库时就必须杀死该进程  
  代码如下:  
   
  ///   <summary>  
  ///   还原数据库函数  
  ///   </summary>  
  ///   <param   name="strDbName">数据库名</param>  
  ///   <param   name="strFileName">数据库备份文件的完整路径名</param>  
  ///   <returns></returns>  
  public   bool   RestoreDB(string   strDbName,string   strFileName)    
  {    
  //PBar   =   pgbMain   ;    
  SQLDMO.SQLServer   svr   =   new   SQLDMO.SQLServerClass()   ;    
  try    
  {    
  //服务器名,数据库用户名,数据库用户名密码  
  svr.Connect("localhost","sa","hai")   ;  
   
  SQLDMO.QueryResults   qr   =   svr.EnumProcesses(-1)   ;    
  int   iColPIDNum   =   -1   ;    
  int   iColDbName   =   -1   ;    
  for(int   i=1;i<=qr.Columns;i++)    
  {    
  string   strName   =   qr.get_ColumnName(i)   ;    
  if   (strName.ToUpper().Trim()   ==   "SPID")    
  {    
  iColPIDNum   =   i   ;    
  }    
  else   if   (strName.ToUpper().Trim()   ==   "DBNAME")    
  {    
  iColDbName   =   i   ;    
  }    
  if   (iColPIDNum   !=   -1   &&   iColDbName   !=   -1)    
  break   ;    
  }    
                                  //杀死使用strDbName数据库的进程  
  for(int   i=1;i<=qr.Rows;i++)    
  {    
  int   lPID   =   qr.GetColumnLong(i,iColPIDNum)   ;    
  string   strDBName   =   qr.GetColumnString(i,iColDbName)   ;    
  if   (strDBName.ToUpper()   ==   strDbName.ToUpper())    
  {  
  svr.KillProcess(lPID)   ;    
  }  
  }    
                                   
  SQLDMO.Restore   res   =   new   SQLDMO.RestoreClass()   ;    
  res.Action   =   0   ;    
  res.Files   =   strFileName   ;    
   
  res.Database   =   strDbName   ;    
  res.ReplaceDatabase   =   true   ;    
  res.SQLRestore(svr)   ;    
  return   true   ;    
  }    
  catch  
  {    
  return   false;  
  }    
  finally    
  {    
  svr.DisConnect()   ;    
  }    
  }