求助:vc中如何使用exp/imp命令全备份/恢复oracle数据库?如何写批处理文件?各位高手请进

解决方案 »

  1.   

    用CreateProcess调用imp、exp不就行了
      

  2.   

    首先你要会用imp/exp
    然后用这个函数
    WinExec(_T("imp xxxx"), SW_HIDE);
    但是这种方式无法获取执行结果最好用CreateProcess,然后解析程序的输出
      

  3.   

    给你一个类似的例子,这个是调用ping命令
    自己修改一下改为调用imp/exp即可
    // 以太工作室 东东BOOL Ping(LPCTSTR szTarget, DWORD &dwTime)
    {
    BOOL bSuccess = FALSE;
    dwTime = INFINITE; if(szTarget == NULL)
    {
    TRACE0("Target Is NULL\n");
    return FALSE;
    } TCHAR szCmdLine[80];
    if(_sntprintf(szCmdLine, sizeof(szCmdLine) / sizeof(TCHAR),
    _T("ping.exe -n 1 %s"), szTarget) == sizeof(szCmdLine) / sizeof(TCHAR))
    {
    TRACE0("Target Is Too Long\n");
    return FALSE;
    }    HANDLE hWritePipe = NULL;
    HANDLE hReadPipe = NULL;
    HANDLE hWriteShell = NULL;
    HANDLE hReadShell = NULL; SECURITY_ATTRIBUTES  sa;
    memset(&sa, 0, sizeof(sa));
    sa.nLength = sizeof(sa);
    sa.bInheritHandle = TRUE;
    sa.lpSecurityDescriptor = NULL; if(CreatePipe(&hReadPipe, &hReadShell, &sa, 0)
    && CreatePipe(&hWriteShell, &hWritePipe, &sa, 0))
    {
    STARTUPINFO si;
    memset(&si, 0, sizeof(si));
    si.cb           = sizeof(si);
    si.dwFlags      = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    si.hStdInput    = hWriteShell;
    si.hStdOutput   = hReadShell;
    si.hStdError    = hReadShell;
    si.wShowWindow  = SW_HIDE;

    PROCESS_INFORMATION pi;
    memset(&pi, 0, sizeof(pi));

    int nMin = -1, nMax = -1, nAvg = -1;
    if(CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
    {
    if(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0)
    {
    TCHAR szBuffer[1024];
    DWORD dwBytes;
    if(ReadFile(hReadPipe, szBuffer, sizeof(szBuffer), &dwBytes, NULL))
    {
    szBuffer[dwBytes] = '\0'; LPTSTR lpszTime = NULL;
    lpszTime = _tcsstr(szBuffer, _T("Request timed out"));
    if(lpszTime == NULL)
    {
    lpszTime = _tcsstr(szBuffer, _T("Minimum"));
    if(lpszTime != NULL)
    {
    if(_stscanf(lpszTime, _T("Minimum = %dms, Maximum = %dms, Average = %dms"),
    &nMin, &nMax, &nAvg) == 3)
    {
    TRACE3("%d, %d, %d\n", nMin, nMax, nAvg); dwTime = nAvg;
    bSuccess = TRUE;
    }
    }
    else
    {
    TRACE0("PING FORMAT is Error\n");
    }
    }
    else
    {
    TRACE0("PING is Time Out\n"); bSuccess = TRUE;
    }

    }
    }
    else
    {
    TRACE1("Process(%d) is Time Out\n", pi.dwProcessId);
    TerminateProcess(pi.hProcess, 0);
    } CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess); TRACE3(_T("Minimum = %dms, Maximum = %dms, Average = %dms\n"), nMin, nMax, nAvg);
    }
    }    if(hWritePipe != NULL)
    CloseHandle(hWritePipe);
        if(hReadPipe != NULL)
    CloseHandle(hReadPipe);
        if(hWriteShell != NULL)
    CloseHandle(hWriteShell);
        if(hReadShell != NULL)
    CloseHandle(hReadShell); return bSuccess;
    }