VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - ADO使用技巧:firehose游标和存储过程中的错误提示
发表评论(0)作者:BUILDER.COM, 平台:VB6.0+Win98, 阅读:14178, 日期:2003-08-29
    许多VB6应用程序的核心都和ActiveX数据对象(ADO)有关。编写VB代码时,下面这两个技巧或许对你有用。第一个技巧帮助你创建firehose游标,第二个技巧着眼于在存储过程发现错误(raise error)。

用firehose游标来加速数据访问

许多应用程序使用ADO来访问数据库。使用firehose游标可以显著提高应用程序访问数据库的速度。

Firehose游标运行在服务器端,它是前向的只读游标。当使用firehose游标时,记录直接从服务器流到用户端并保存到Recordset对象中。Firehose游标对只读数据以及需要立即处理的数据非常有用。清单A中的代码会产生一个firehose游标。

当使用firehose游标时,最好从Recordset检索数据并尽快关闭Recordset。这样可以释放客户端和服务器间的资源。

在ADO.NET下,由于DataReader对象也有前向、只读游标,所以它也可以完成与firehose游标相似的功能,如代码清单B所示。DataReader的限制与ADO中的firehose游标也是相同的。行(rows)被处理后DataReader应该尽早关闭以释放资源,使得连接可以用于其它目的。

用ADO来捕获存储过程中的错误
应用程序经常使用ActiveX数据对象(ADO)和存储过程(stored procedure)来读和写SQL服务器数据库的数据。当你这么做时,你可能需要从存储过程中发现错误。为了正确实现这一点,你必须用一种特殊的方式调用ADO命令。在存储过程中调用RAISERROR语句来捕获错误,如清单C给出的代码所示。

正常情况下,存储过程中的产生的错误将返回到ADO连接对象中的DBError集合中。不过,只有在同时满足以下条件的情况下,这些错误才会被捕获:

一个ADO命令对象用来执行这个(存储)过程。
adExecuteNoRecords标志传递给执行方法。
存储过程有输出参数或者返回一个Recordset。
如果你使用下面的代码来执行没有输出参数且没有返回纪录的存储过程,那么存储过程中产生的任何错误都会被添加到Connection对象的DBError集合中:

Call Command.Execute(, , adExecuteNoRecords)

If Command.ActiveConnection.Errors.Count > 0 Then
    注释:Handle Error
End If

然而,如果存储过程返回记录或者由输出参数,那么调用它时一定不能使用adExecuteNoRecords标志。即使你不需要返回纪录,也不能在调用时使用该标志,否则就不能捕获到错误:

Set Recordset = Command.Execute()

If Command.ActiveConnection.Errors.Count > 0 Then
    注释:Handle Error
End If

如果你知道如何正确设置ADO错误捕获,就可以大量节省应用程序调试时间。