TRY ... CATCH
- Last UpdatedApr 24, 2026
- 1 minute read
TRY ... CATCH 提供了一种可以处理会在给定代码块中发生的部分或所有可能错误的方法,同时还能保持代码继续运行而不终止程序。代码的 TRY 部分称为尝试块。处理代码 CATCH 部分的任何异常,称为捕获块。
TRY ... CATCH 的通用格式如下:
TRY
[try statements] ’受保护的部分
CATCH
[catch statements]
ENDTRY
其中:
tryStatements
发生错误的语句。可以是组合语句。tryStatement 是受保护的部分。
catchStatements
处理在关联尝试块中发生的错误的语句。可以是组合语句。
捕获块中的语句可能会引用保留的 ERROR 变量,后者是尝试块抛出的 .NET System.Exception。只有在尝试块抛出异常后,捕获块中的语句才会运行。
TRY ... CATCH 的执行方式如下:
-
处理运行时错误始于 TRY。将可能会导致错误的代码放入尝试块。
-
如果未发生运行时错误,则脚本将正常运行。捕获块语句将被忽略。
-
如果发生运行时错误,则不会执行尝试块的剩余部分。
-
发生运行时错误时,程序将立即跳到 CATCH 语句并执行捕获块。
最简单的一种异常处理方法就是停止程序,写出异常消息,然后继续执行程序。
错误变量不是字符串,而是 System.Exception 的 .NET 对象。这就意味着即使使用简单的 CATCH 语句,也可以确定异常类型。调用 GetType() 方法以确定异常类型,然后执行所需操作,类似于执行多个捕获块。
示例:
dim command = new System.Data.SqlClient.SqlCommand;
dim reader as System.Data.SqlClient.SqlDataReader;
command.Connection = new System.Data.SqlClient.SqlConnection;
try
command.Connection.ConnectionString = "Integrated Security=SSPI";
command.CommandText="select * from sys.databases";
command.Connection.Open();
reader = command.ExecuteReader();
while reader.Read()
me.name = reader.GetString(0);
LogMessage(me.name);
endWhile;
catch
LogMessage(error);
endtry;
if reader <> null and not reader.IsClosed then
reader.Close();
endif;
if command.Connection.State == System.Data.ConnectionState.Open then
command.Connection.Close();
endif;
注意:上述代码示例使用了 System.Data.SqlClient 方法,该方法已弃用。建议改用 SQLData 脚本库来执行 SQL Server 查询。