我写了一段程序,目的是将一个oracle的dmp备份导入到数据库中。
手动导入的时候,可以打开“开始”-》“运行”。然后输入imp。会打开一个窗口,先输入用户名,然后密码,然后导入文件名,缓冲区大小,接着几个是否问题。最后是导入的进程显示。正在导入什么表,导入了多少条数据什么的。请问如何在程序里面调用imp程序,同时在界面上显示相应的消息。就像直接运行imp时候的那些输入提示。特别是提示正在导入什么表,导入了多少条数据的消息。请大家先看看现在的代码。//txtInfo是一个消息提示框,所以希望能将相关消息写入该文本框。
txtInfo.AppendText("开始将dmp文件导入Oracle数据库\r\n");
txtInfo.ScrollToCaret();Process dosProcess = new Process();
dosProcess.StartInfo.FileName = "imp.exe";
dosProcess.StartInfo.UseShellExecute = false;
dosProcess.StartInfo.RedirectStandardInput = true;
dosProcess.StartInfo.RedirectStandardOutput = true;
dosProcess.StartInfo.RedirectStandardError = true;
dosProcess.StartInfo.CreateNoWindow = false;dosProcess.Start();dosProcess.StandardInput.WriteLine(LoginName);//输入登录名
dosProcess.StandardInput.WriteLine(PSW);//密码
dosProcess.StandardInput.WriteLine(DmpFile);//导入的dmp文件路径
dosProcess.StandardInput.WriteLine("30720");//缓冲区大小
dosProcess.StandardInput.WriteLine("no");//是否只列出导入的内容
dosProcess.StandardInput.WriteLine("yes");//是否忽略创建错误
dosProcess.StandardInput.WriteLine("yes");//是否导入权限
dosProcess.StandardInput.WriteLine("yes");//是否导入表数据
dosProcess.StandardInput.WriteLine("yes");//是否导入整个dmp文件。txtInfo.AppendText("dmp文件导入完成。\r\n");
txtInfo.ScrollToCaret();

解决方案 »

  1.   


    别人工具都写好了,楼主非要折腾一下。Toad,pl/sql DEV 都有这样的功能.  至于怎么条用imp 命令,那是代码的事了。 imp有个log 选项,可以把日志写入一个文本,在代码里把这个文本时时的显示一下应该就可以了..
    ------------------------------------------------------------------------------
    Blog: http://blog.csdn.net/tianlesoftware
    网上资源: http://tianlesoftware.download.csdn.net
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
    Q Q 群:62697716 
      

  2.   


    String cmd = "imp " + userName + "/" + userPassword + "@" + sid
    + " parfile=" + parFilePath;
    try {
    Process process = Runtime.getRuntime().exec(cmd);
    BufferedReader br = new BufferedReader(new InputStreamReader(
    process.getErrorStream()));
    line = "";
    while ((line = br.readLine()) != null) {
    //打印出来
    }
    } catch (IOException e) {
    throw new PmException("imp fail...", e);
    }
    楼主看下,你是不是这个意思哈
      

  3.   

    我写的是java中捕获导入过程中输出的错误流,楼主可参考下C#中怎么去捕获输出流。
      

  4.   

    直接获得参数,然后拼出imp user/pwd@tnsname ...这样的命令,然后执行。