这几天在做B/S结构的毕业设计
弄了一天的数据还原,碰到几个问题想请教一下各位:
1、数据还原的时候无法用kill杀掉自己的进程
2、考虑到上面那个问题,我在网上找到思路以及在数据库返回的建议中都指出到master下执行还原操作。那么我想请问:
首先,假如我要恢复的数据库名为:db_Test,那么我在这个db_Test下创建了一个恢复数据库的存储过程proc_dbRe,
那么我在这个存储过程中定义了一个参数,定义如下:
declare @sql varchar(8000)
set @sql='restore database '+@dbname+' from disk='''+@bkpath+@bkfile+''''+' with '+ 'replace' + ',RECOVERY' 
按照正常的应该是在下面最后接下来的语句就是exec(@sql),到此处我想应该没问题,但是上面第二点提到,需要转换到
master下执行,那么我用exec('use master ...'),问题又出来了,我的@sql没法传过去(不是没法,是我不会...),我
该怎么样解决这个问题呢?
第二个问题就是:跳转到master成功,以及执行完kill后需要设置数据库当前模式为单用户模式吗?为什么?
最后一个问题就是:kill是不是不是强制杀进程的?我看帮助文档的时候,上面有写到在数据库正在提交或者***(省略内容)
的时候就会中断执行。以上几个小问题,呵呵,谢谢各位。关于分数我也不知道我有多少分,我先试着拿出50分,好像少了点,以后有分了我就追加。

解决方案 »

  1.   

    1、数据还原的时候无法用kill杀掉自己的进程 
    =============================================
    这是一个悖论。呵呵
      

  2.   


     private void BtnRestore_Click(object sender, EventArgs e)
            { //还原数据库
                
                try
                {
                    string connectionString = "Data Source = " + server.DBServer + ";user id = " + server.DBUser + ";password = " + server.DBPwd;
                    SqlConnection conn = new SqlConnection();
                    SqlCommand cmd;
                    string sql = "RESTORE FILELISTONLY  FROM DISK ='" + dire 
                    + "' RESTORE DATABASE " + server.DBName + " FROM DISK = '" + dire  + "' " +
                                 "WITH MOVE '" + server.DBName + "_dat' TO '" + dire+ ".mdf',MOVE '" +
                                 server.DBName + "_log' TO '" + dire + "_log.ldf '";
                    conn.ConnectionString = connectionString;
                    conn.Open();
                    cmd = new SqlCommand(sql, conn);
                    int num= cmd.ExecuteNonQuery();
                    if(num>0)
                    {
                        this.label3.Text = "数据库还原成功!";
                    }
                    else
                    {                    this.label3.Text ="数据库还原失败!";
                    }
                }
                catch (Exception es)
                {
                    this.label3.Text = "数据库还原过程中出现异常!";
                    this.txtDataBaseName.Text = "";
                    this.BakFilePath.Text = "";
                    this.BtnException.Visible = true;
                    ExceptionString = es.ToString();
                }
            }