我在查询分析器里面,执行
restore database mydb from disk='1.dat'
可以成功执行。
可是,在vc程序里,执行这样的语句,sqlserver说“超时已过期”。
sqlserver 就在本地,我把超时的时间设置得很长也不行。
点解呢?

解决方案 »

  1.   

    因为你在程序中已经连接到了要恢复的数据库上,而恢复数据库是需要独占数据库的,所以出错。正确的做法是,重新定义一个新的连接,这个连接用户必需据有对数据库的操作权限,连接默认的数据定义为其他数据库,如master,然后在程序中用这个新建连接连接到数据库,再运行restore database mydb from disk='1.dat'就行了
      

  2.   

    small_wei(small) 的做法好像也不行,去年做课程设计我也做过.没有成功,最后解决的方法是,shellexecute  isqlw,然后找到isqlw查询窗口的句柄,然后再setwindowtext,让用户点击一下那个小▲就可以恢复了.
      

  3.   

    备份:
             CDatabase db;
    CString s1;
    s1.Format("ODBC;UID=sa;PWD=%s","wei147");
    db.Open("odbcname",false,false,s1);
    s1.Format("backup database report to disk='e:\\report.bak\\backs.dat'"); //备份到E:\report.bak\backs.dat
    db.ExecuteSQL(s1);
    恢复:
             恢复时用户不能打开要恢复的数据库
    CDatabase db1;
             s1.Format("ODBC;UID=sa;PWD=%s","wei147");
    db1.Open("odbcname",false,false,s1);
    s1.Format("restore database report from  disk='c:\\report.bak\\backs.dat'");
    db1.ExecuteSQL(s1);
    db1.Close();
    VC++ODBC做的