备份数据库:backup database schoolmanage to disk c:\schoolmanage.bak
恢复数据库:restore database schoolmanage from disk=@backfile
此种方法的问题是[恢复数据库]要杀掉其他用户的进程,但是杀掉进程的存储过程要建在MASTER数据库中,这样在数据库部署时不方便,因为部署数据库时不能在MASTER中建存储过程的,所以我想问的是这个恢复数据库到底这么做才是规范的?能提供源码最好。

解决方案 »

  1.   

    http://www.cnblogs.com/wangergo/archive/2005/12/01/288465.html
    去看下,我老师写的。
    代码如下:asp.net 备份和恢复SQL SERVER 数据库 
       恢复数据库:
      关键字:Alter Database 被恢复的数据库名 Set Offline with Rollback immediate;
                restore database 被恢复的数据库名 from disk = '备份文件路径';
                Alter Database 被恢复的数据库名 Set OnLine With rollback Immediate;/////////////////////
        string sql = "Alter Database db Set Offline with Rollback immediate;"; //db 是要备份的数据库名
        sql +=  "restore database db from disk = '" ;
        sql += Server.MapPath("").ToString() +"\\";
        sql += bakname + "'";  //bakname 是备份文件名
        sql += "Alter Database db Set OnLine With rollback Immediate;";
        try
        {
         连接 master 数据库 ;
         执行 sql  语句;
         Response.Write("<script language=javascript>alert('数据恢复成功!');</script>");
        }
        catch(Exception ex)
        {
         Response.Write("<script language=javascript>alert('数据恢复失败!');</script>");
         this.Label2.Text = ex.ToString();
        }备份数据库:关键字:backup database 被备份的数据库名 to disk ='备份文件路径';
    //////////////////////     
     string sql = "backup database db to disk = '" + Server.MapPath("").ToString() +"\\"
        + bakname  //备份文件名 
        + System.DateTime.Now.DayOfYear.ToString() 
        + System.DateTime.Now.Millisecond.ToString() + ".bak'";
      try
    {  
      连接 被备份的数据库 ;
      执行 sql  语句;   Response.Write("<script language=javascript>alert('备份成功!');location='restore.aspx'</script>");
    }
        catch(Exception ex)
        {
         Response.Write("<script language=javascript>alert('备份失败!');</script>");
         this.Label2.Text = ex.ToString();
        }
      

  2.   

    请问怎么连接 master 数据库 ;?在C#中这个语法怎么写?
      

  3.   

    namespace BlogsTransition
    {
    /// <summary>
    /// SqlDataPrivater 数据连接层、业务逻辑层
    /// </summary>
    public class SqlDataProvider
    {
    private SqlConnection conn;
    private SqlCommand sqlCommand;
    private SqlDataAdapter sqlAdapter; public SqlDataProvider()
    {
    this.conn = new SqlConnection("server=(local);DataBase=master;Uid=sa;Pwd=;");
    this.sqlAdapter = new SqlDataAdapter();
    } /// <summary>
    /// 打开数据连接
    /// </summary>
    private void Open()
    {
    if(this.conn.State == ConnectionState.Closed)
    {
    this.conn.Open();
    return ;
    }
    } /// <summary>
    /// 关闭数据连接
    /// </summary>
    private void Close()
    {
    if(this.conn.State == ConnectionState.Open)
    {
    this.conn.Close();
    return ;
    }
    } /// <summary>
    /// 执行T-SQL语句
    /// </summary>
    /// <param name="sqlString">查询字符串</param>
    /// <returns>DataTable</returns>
    public DataTable ExecSqlReturnTable(string sqlString)
    {
    DataTable table = new DataTable();
    try
    {
    this.Open();
    //设置命令对象的属性
    this.sqlCommand = this.conn.CreateCommand();
    this.sqlCommand.CommandText = sqlString; //命令绑定
    this.sqlAdapter.SelectCommand = this.sqlCommand;
    this.sqlAdapter.Fill(table);
    }
    catch
    {
    return null;
    }
    finally
    {
    this.Close();
    }
    return table;
    }
      

  4.   

    我是这样的,但出错
    备份:
            string commstr = "'"+ TextBox1.Text + "'";
            string backup_sql = "use schoolmanage2005;backup database schoolmanage2005 to disk=" + commstr + " with INIT;";
            SqlCommand comm = new SqlCommand(backup_sql, conn);
            try
            {
                conn.Open();
                comm.ExecuteNonQuery();
                Response.Write("<script language=javascript>alert('数据库备份成功,备份文件在C盘根目录下!')</script>");
            }
            catch
            {
                Response.Write("<script language=javascript>alert('数据库备份失败!')</script>");
            }
            finally
            { 
                conn.Close();
            }
    恢复:
            string path = "'"+FileUpload1.PostedFile.FileName+"'";
            string sql = "use master;Alter Database schoolmanage2005 Set Offline with Rollback immediate;"; 
            sql += "Restore Database schoolmanage2005 from disk = @bkfile;";
            sql += "Alter Database schoolmanage2005 Set OnLine With rollback Immediate;";
            SqlCommand comm = new SqlCommand(sql, conn);
            comm.Parameters.AddWithValue("@bkfile", path);
            conn.Open();      
            comm.ExecuteNonQuery();
            conn.Close();
    错误信息:
    无法打开备份设备 ''C:\schoolmanagebackup(2006-9-6).bak''。设备出现错误或设备脱机。详细信息请参阅 SQL Server 错误日志。
    RESTORE DATABASE 操作异常终止。
    已将数据库上下文改为 'master'。