用SHELLEXECUTEINFO把文件倒入数据库的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 wjp1226
  • 开始时间 开始时间
W

wjp1226

Unregistered / Unconfirmed
GUEST, unregistred user!
var
FilePath,strToday:string;
ShExecInfo:SHELLEXECUTEINFO ;

begin


SHExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
SHExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
SHExecInfo.Wnd := application.Handle;
SHExecInfo.lpVerb := nil;
SHExecInfo.lpFile := pchar('bcp');
SHExecInfo.lpParameters := pchar(strfile);
SHExecInfo.lpDirectory := nil;
SHExecInfo.nShow := SW_SHOW;
SHExecInfo.hInstApp := application.Handle;
ShellExecuteEx(@SHExecInfo);
WaitForSingleObject(SHExecInfo.hProcess, INFINITE);
closeHandle(SHExecInfo.hProcess);
end;

我用上面的方法通过SHELLEXECUTEINFO调用bcp把多个文件倒入数据库中,可是第一次调用这个函数运行正常,倒入第二个文件时就只探出一个黑色命令行窗口,没有什么反应,也不倒入数据,这是什么原因呢?
期盼这个大牛指教!
 
我经过几次测试发现问题是这样的,两次倒入中间有进行一个统计分析计算,
在这个过程中报了一个连接超时的错误。把这个步骤省去就可以连续导入了,
那新问题了了,sqlserver的连接超时对bcp有什么影响啊?在捕获超时的
异常后应该做些什么处理才行能?
 
你在你的bcp程序中写入对ExitCode的赋值,如果导入成功,ExitCode赋值为0,反之赋值为非0的整数(例如1),在你上述代码中做如下修改:
ShellExecuteEx(@SHExecInfo);
WaitForSingleObject(SHExecInfo.hProcess, INFINITE);
GetProcessExitCode(SHExecinfo.hProcess, AExitCode);
if AExitCode <> 0 then
//通知用户,导入超时。
 
后退
顶部