关于检核数据库连接句柄的有关问题

关于检核数据库连接句柄的问题
Conn   =   SQLStringConnect( "DRIVER={SQL   Server};SERVER=192.168.100.12;UID=sa;PWD=;DATABASE=Test ")

If   SQLExec(Conn, "Select   *   From   TableName1 ", "Tmp ") <=0
      MessageBox( "Wrong! ")
EndIf
Select   Tmp
Browse
Use   In   Tmp

此时我将192.168.100.12上的SQL服务停止。

If   SQLExec(Conn, "Select   *   From   TableName2 ", "Tmp ") <=0
      MessageBox( "Wrong! ")
EndIf

执行第二句SQL时会失败,因为这时Conn连接句柄失效了。但是我看Conn的数值还是正数。

请问:像这种连接句柄失效时,我怎么检查数据库的连接状态啊?

------解决方案--------------------
参考ON ERROR:
ON ERROR DO errHandler WITH ;
ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( )
USE nodatabase
ON ERROR && Restores system error handler.

PROCEDURE errHandler
PARAMETER merror, mess, mess1, mprog, mlineno
CLEAR
? 'Error number: ' + LTRIM(STR(merror))
? 'Error message: ' + mess
? 'Line of code with error: ' + mess1
? 'Line number of error: ' + LTRIM(STR(mlineno))
? 'Program with error: ' + mprog
ENDPROC

------解决方案--------------------
将以下代码保存为一个Prg文件,如:MyFunction.prg

*====================================================
*作 用:写ODBC错误到日志ErrorLog.txt,并显示错误信息
*语 法:MyWriteShowOdbcErr(c另外要显示错误信息)
*参数说明:可为空,如 ' '
*返 回 值:无,直接写入日志文件并显示了错误信息
*====================================================
FUNCTION MyWriteShowOdbcErr
PARAMETERS tcWarnInfo
SET TEXTMERGE DELIMITERS TO
SET TEXTMERGE ON
SET TEXTMERGE TO ErrorLog.txt ADDITIVE NOSHOW
\-----------------------------------------------
\ < <DATETIME()> > ODBC 错误记录
nErrLine=AERROR(laErr)
FOR N=1 TO nErrLine
\错误编号: < <laErr(N,1)> >
\错误信息: < <laErr(N,2)> >
\ODBC 信息: < <laErr(N,3)> >
\ODBC SQL 状态: < <laErr(N,4)> >
\ODBC 数据源错误编号: < <laErr(N,5)> >
\ODBC 连接句柄: < <laErr(N,6)> >
\
\-----------------------------------------------
ENDFOR
SET TEXTMERGE TO
IF AERROR(laError)> 0
=MESSAGEBOX(CHR(10)+laError[2]+SPACE(5)+CHR(10)+CHR(10)+tcWarnInfo,0+16, '错误: '+TRANSFORM(laError[1]))
ELSE
MESSAGEBOX(tcWarnInfo,16, '错误 ')
ENDIF
ENDFUNC


*---------------
然后在主程序中加代码:
SET PROCEDURE TO MyFunction.PRG


*----------------
最后你的代码
MessageBox( "Wrong! ")

改为

MyWriteShowOdbcErr( " ")