m_rDb.Open("Data Source=dd;UID=sa;PWD=;");
m_rset.m_pDatabase=&m_rDb;
try
{
CString abc,bcd;
abc.Format("EXEC sp_dboption 'wisdom','single user','true'");
bcd.Format("EXEC sp_dboption 'wisdom','single user','false'");
         m_rDb.Execute(abc);//(1)
         m_rDb.Execute("use master");
         m_rDb.Execute("go");
m_rDb.Execute("EXEC wisrestore");
m_rDb.Execute("use wisdom");
         m_rDb.Execute("go"
         m_rDb.Execute(bcd);
MessageBox("完成数据库恢复");
}
catch(_com_error &e)
{
CString str;
str=e.ErrorMessage();
str="数据恢复失败 "+str;
AfxMessageBox(str);

}dd为ODBC数据源中配置的数据源名字,对应wisdom数据库。
我想实现数据恢复,恢复的存储过程在master数据库中,master数据库我配置了ff数据源,但2个数据源同时调用我不会操作,在(1)处就出现错误,但是捕捉不到请大侠们指点!

解决方案 »

  1.   

    经过改动,还是不行,我把代码简化,只运行一句都出错,但是还是捕捉不到错误。
    m_rDb.Open("Data Source=dd;UID=sa;PWD=;");
    CString abc;
    abc.Format("EXEC sp_dboption 'wisdom','single user','true'");
    m_rDb.Execute(abc);只运行这一句都出错,为什么? 这句放入查询分析器中可以正常运行的。
      

  2.   

    楼上说的对,应该定义两个CDatabase对象,分别打开两个数据源。
      

  3.   

    可是只运行其中一个就出错 那运行2个肯定不行,请你们帮忙找找问题在哪,谢谢
    m_rDb.Open("Data Source=dd;UID=sa;PWD=;");
    CString abc;
    abc.Format("EXEC sp_dboption 'wisdom','single user','true'");
    m_rDb.Execute(abc);
    在查询分析器中完美运行通过
    是不是abc.format这句有什么问题?
      

  4.   

    你的Open语句好象不对
    m_rDb.Open("DSN=dd;UID=sa;PWD=;");
    m_rDb.ExecuteSQL(abc);   //改成ExecuteSQL
      

  5.   

    abc.Format("EXEC sp_dboption 'wisdom','single user','true'");
    最后一个参数应该是1或0吧?你先写一个不带参数的存储过程试试。
      

  6.   

    谢谢石头  我的Open没问题,m_rDb是CADODatabase类型变量,用Execute()没问题,我自己的CADODatabase类;sp_dboption的参数我改成0/1都不行,提示Usage: sp_dboption [dbname [,optname [,'true' | 'false']]]  再帮我找找 谢谢!!!!
      

  7.   

    改为0或1则两端不能加单引号。//ADO我用的不多,我还以为是ODBC的