网友写的一个数据库远程备附加、分离、备份、还原类

来源:互联网 发布:打码赚钱软件 编辑:程序博客网 时间:2024/05/22 00:03


/*C#自动附加、分离、备份、还原数据库的操作方法*/
using System;
using System.IO;
using System.Net;
using System.Data;
using System.Threading;
using System.Collections;
using System.Diagnostics;
using System.ComponentModel;
using System.ServiceProcess;
using System.Data.SqlClient;
namespace LengYue
{
/// <summary>
/// 提供附加、分离、备份、还原数据库的操作方法
/// </summary>
public class OperDB_Lengyue
{
   //使用集成连接数据库
   private static string ConnectionString=Dns.GetHostName()+";integrated security=SSPI;data source=.;persist security info=False;Initial Catalog=master";

  

   /// <summary>
   /// 启动sql服务
   /// </summary>
   private static void StartSqlServer()
   {
    ProcessStartInfo info=new ProcessStartInfo("net.exe"," start mssqlserver");
    info.CreateNoWindow=true;
    info.WindowStyle=ProcessWindowStyle.Hidden;
    Process ps=Process.Start(info);
   }
   /// <summary>
   /// 附加数据库
   /// </summary>
   /// <param name="DbName">将数据库附加为的名字</param>
   /// <param name="Mdf">MDF</param>
   /// <param name="Ldf">LDF</param>
   /// <returns>附加成功返回真</returns>
   public static bool AddDataBase(string DbName,string path_Mdf,string path_Ldf)
   {
    bool bl=false;
    StartSqlServer();//启动sql服务
    try
    {
     SqlConnection C SqlConnection(ConnectionString);
     Conn.Open();
     //sp_detach_db分离数据,sp_attach_db附加数据
     string ComText="IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'"+DbName+"')"+
      "begin EXEC sp_detach_db "+DbName+" end "+//如果数据库已经存在则先分离
      "EXEC sp_attach_db @dbname = N'"+DbName+"',"+
      "@filename1 = N'"+path_Mdf+"',"+
      "@filename2 = N'"+path_Ldf+"'";
     SqlCommand Comm = new SqlCommand(ComText,Conn);
     Comm.ExecuteNonQuery();
     Conn.Close();
     bl=true;
    }
    catch(Exception ex)
    {
     throw new ApplicationException("附加数据库失败",ex);
    }
    return bl;
   }


   /// <summary>
   /// 分离数据库
   /// </summary>
   /// <param name="DbName">要分离的数据库名</param>
   /// <returns>分离成功返回真</returns>
   public static bool SeverDataBase(string DbName)
   {
   
    bool bl=false;
    StartSqlServer();//启动sql服务
    try
    {
     SqlConnection C SqlConnection(ConnectionString);
     Conn.Open();
     //sp_detach_db分离数据,sp_attach_db附加数据
     string ComText="EXEC sp_detach_db "+DbName;
     SqlCommand Comm = new SqlCommand(ComText,Conn);
     Comm.ExecuteNonQuery();
     Conn.Close();
     bl=true;
    }
    catch(Exception ex)
    {
     throw new ApplicationException("分离数据库失败",ex);
    }
    return bl;
   }
   /// <summary>
   /// 备份数据库
   /// </summary>
   /// <param name="DbName">要备份的数据库名</param>
   /// <param name="BackupPath_name">备份设备(路径+文件.bak)</param>
   /// <returns> 备份成功返回真</returns>
   public static bool BackupDataBase(string DbName,string BackupPath_name)
   {
   
    bool bl=false;
    //如果看不懂下面的代码请不要随便改动
    StartSqlServer();//启动sql服务
    try
    {
     SqlConnection C SqlConnection(ConnectionString);
     Conn.Open();
     //sp_detach_db是分离数据的储藏过程,sp_attach_db是附加数据的储藏过程
     string ComText="use master;backup database "+DbName+" to disk = '"+BackupPath_name+"'";
     SqlCommand Comm = new SqlCommand(ComText,Conn);
     Comm.ExecuteNonQuery();
     Conn.Close();
     bl=true;
    }
    catch(Exception ex)
    {
     throw new ApplicationException("备份数据库失败",ex);
    }
    return bl;
   }
   /// <summary>
   /// 还原数据库
   /// </summary>
   /// <param name="BackupPath_name">数据源(路径+文件)</param>
   /// <returns>还原成功返回真</returns>
   public static bool ReplaceDataBase(string DBName, string BackupPath_name)
   {
    bool bl=false;
    StartSqlServer();//启动sql服务
    try
    {
     SqlConnection C SqlConnection(ConnectionString);
     Conn.Open();
     string ComText="use master;restore database "+DBName+" From disk = '"+BackupPath_name+"' with replace;";
     SqlCommand Comm = new SqlCommand(ComText,Conn);
     Comm.ExecuteNonQuery();
     Conn.Close();
     bl=true;
    }
    catch(Exception ex)
    {
     throw new ApplicationException("还原数据库失败",ex);
    }
    return bl;
   }
}
}

原创粉丝点击