VC+SQL数据库备份、还原

刚刚完成一个员工管理系统,系统是用VC+SQL开发的,在系统开发过程中遇到了一个愣郁闷的问题。菜单中有一块数据维护功能,也就是常用的数据库备份和数据库还原,数据库备份功能很顺利的完成了,但是数据库还原功能始终不行,报错:“.........没有权限........”,之后在网上查了好多资料才明白,用VC打开程序后,会与数据库连接,但是要还原数据库时还不能有与你要还原的数据库连接的进程,感觉挺矛盾。下面我把解决问题的源码写下来,供遇到同样问题的朋友参考。

数据库备份部分:

// 初始化、连接数据库
void ADOConn::OnInitADOConn()
{
     // 初始化OLE/COM库环境
     ::CoInitialize(NULL);

     try
     {
         // 创建Connection对象
          m_pConnection.CreateInstance("ADODB.Connection");
          // 设置连接字符串,必须是BSTR型或者_bstr_t类型
          _bstr_t strConnect = "Provider=SQLOLEDB; Server=(local);Database=Hospinfo/*要连接的数据库名称*/; uid=sa; pwd=1;";
          m_pConnection->Open(strConnect,"","",adModeUnknown);
     }
     // 捕捉异常
     catch(_com_error e)
    {
         // 显示错误信息
          AfxMessageBox(e.Description());
     }
}

//备份数据库文件
void ADOConn::BackUp(CString FilePath)
{
     if (FilePath != "")
    {
         try
          {
               //连接数据库
              OnInitADOConn();
              _bstr_t vSQL;
               vSQL = "backup database Hospital to disk = '"+FilePath+"'";
             ExecuteSQL(vSQL);
              ExitConnect();
              AfxMessageBox("数据库备份成功!");
          }
           // 捕捉异常
           catch(_com_error e)
           {
                // 显示错误信息
               AfxMessageBox(e.Description());
           }
     }
      else
      {
            AfxMessageBox("请指定备份数据路径!");
      }
}

 

数据库还原部分:

//还原数据库文件
void ADOConn::ReStore(CString FilePath)
{
     if (FilePath != "")
     {
         try
          {
                //OnInitADOConn();
                m_pConnection.CreateInstance("ADODB.Connection");
                _bstr_t strConnect = "Provider=SQLOLEDB; Server=(local); Database=master; uid=sa; pwd=1";
               m_pConnection->Open(strConnect,"","",adModeUnknown);
   
          }
       catch (_com_error e)
       {
            AfxMessageBox(e.Description());
      }
       _bstr_t vSQL;
        vSQL= "restore database Hospital from disk = '"+FilePath+"'";
       m_pConnection->Execute(vSQL, NULL, adCmdText);
       AfxMessageBox("数据库还原成功!");
    }
    else
    {
        AfxMessageBox("请指定还原数据路径!");
     }
}

注意上面红色的部分,这就是关键。

这时如果在程序里面进行编译、执行程序的话,当执行数据库还原功能时,系统还是会报错,解决方法:VC中编译生成可执行程序后,关闭VC,直接去运行生成的可执行程序,这时再还原数据库就不会出错了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个AI语言模型,我无法连接SQL Server数据库。但我可以告诉你连接SQL Server数据库的一般步骤: 1. 确保已安装SQL Server驱动程序。 2. 在VC++项目中添加Microsoft的ActiveX Data Objects(ADO)库。 3. 在代码中定义一个Connection对象,然后使用其Open方法连接到SQL Server数据库。 4. 使用Recordset对象中的方法和属性执行SQL操作。 以下是一个示例程序: ``` #include <iostream> #include <windows.h> #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile") using namespace std; int main() { HRESULT hr = CoInitialize(NULL); if (SUCCEEDED(hr)) { _ConnectionPtr pConn = NULL; _RecordsetPtr pRs = NULL; try { hr = pConn.CreateInstance(__uuidof(Connection)); if (SUCCEEDED(hr)) { pConn->Open("Provider=SQLOLEDB; Data Source=server_name; Initial Catalog=database_name; User ID=username; Password=password", "", "", adConnectUnspecified); if (pConn->State == adStateOpen) { hr = pRs.CreateInstance(__uuidof(Recordset)); if (SUCCEEDED(hr)) { pRs->CursorLocation = adUseClient; pRs->Open("SELECT * FROM table_name", pConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); while (!pRs->EndOfFile) { cout << (char*)(_bstr_t)pRs->Fields->GetItem("column_name")->Value << endl; pRs->MoveNext(); } } } } } catch (_com_error& e) { cout << "Error: " << e.ErrorMessage() << endl; } if (pConn != NULL && pConn->State == adStateOpen) { pConn->Close(); } CoUninitialize(); } return 0; } ``` 请注意,这只是一个示例程序,并且连接字符串和SQL查询应根据您的实际情况进行更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值