XP,SQLServer安装问题集- -| 回首页 | 2005年索引 | - -清除SQLServer日志的方法

在VB中以“同步”的方式调用DOS命令

关键词VB    同步    调用DOS    命令                                          

通过vb的shell方法,调用外部命令。如sqlserver的osql实用工具,但是这样的话,osql执行的sql脚本可能需要花费很长的时间,如何才能保证osql执行完所有的sql之后,才继续执行vb的下一步处理呢?

1.声明2个API,用来检测进程是否在运行。
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'************************************************************************
'【名称】:判断进程是否在运行
'【描述】:
'【备注】:
'************************************************************************
Function IsRunning(ByVal ProgramID) As Boolean    '传入进程标识ID

    Dim hProgram As Long     '被检测的程序进程句柄
    'READ_CONTROL (0x00020000L) 131072
    'SYNCHRONIZE (0x00100000L) 1048576
    'WRITE_OWNER (0x00080000L) 524288

    hProgram = OpenProcess(131072, False, ProgramID)

    If hProgram = 0 Then
        IsRunning = False
    Else
        IsRunning = True
    End If
    CloseHandle hProgram

End Function

2.调用外部命令之后,不断的轮询该外部命令对应的进程是否已经关闭。
'调用sqlserver的osql工具来执行sql脚本
'输入输出文件路径需要加上引号(sQuote),否则如果路径中有空格,则DOS命令会找不到相应路径
RetVal = Shell("osql -U" & INI_SqlUid & _
                   " -P" & INI_SqlPwd & _
                   " -H" & INI_SqlHost & _
                   " -d" & INI_SqlDb & _
                   " -i" & sQuote & gInputFile & sQuote, vbNormalFocus)

'当使用DOS管道命令“>>”(内部命令)时,需要按照cmd /C的方式进行调用。
    RetVal = Shell("cmd /C osql -U" & INI_SqlUid & _
                       " -P" & INI_SqlPwd & _
                       " -H" & INI_SqlHost & _
                       " -d" & INI_SqlDb & _
                       " -i" & sQuote & gInputFile & sQuote & _
                       " >>" & sQuote & gLogFile & sQuote _
                       , vbNormalFocus)

'检测所调用的外部程序是否运行完毕
While IsRunning(RetVal)
   DoEvents
Wend

参考:
1.http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/openprocess.asp
2.http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_security_and_access_rights.asp
3.所有 DB-Library 应用程序(如 isql)连接到 SQL Server 2000 后,作为 SQL Server 6.5 级客户端工作。它们不支持 SQL Server 2000 的某些功能。而 osql 实用工具是基于 ODBC 并支持 SQL Server 2000 的全部功能。
4.如果需要调用DOS的内部命令,需要使用下面的方法:
Shell "Command.com /C copy c:\autoexec.bat d:\aaa.bat"
/C string       Carries out the command specified by string, and then stops.

【作者: 钢琴狮】【访问统计:】【2005年11月11日 星期五 11:57】【 加入博采】【打印

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=3488666

博客手拉手

[2005-11-11 11:57:53.0]    在VB中以“同步”的方式调用DOS命令

[2005-11-11 12:06:07.0]    在VB中以“同步”的方式调用DOS命令

[2005-11-09 09:53:07.0]    常用命令

[2005-11-10 22:26:57.0]    DOS命令

[2005-11-05 19:11:48.0]    命令 ping

回复

评论内容: