进行学习ADO语句当有人为表增加了更多的列时,你不会得到大得出奇的结果集,一些开发者使用延迟绑定技术的原因在于,他们想要明确地标识出SELECT语句选择了哪些行,不存在代码引用的是哪一个列这类问题。如果你完全按照下列方式编写代码。
不要强制SQL Server每次执行查询的时候重新编译和构造查询执行计划。ADO语句避免这种重复操作的一种简单方法是使用带有参数的存储过程。ADO语句注意尽量不要使用ADO Command对象的Prepare属性——有时它不能正确工作。
如果使用存储过程,你还可以通过消除不必要的“受影响行数”返回值进一步提高ADO性能——只需在存储过程中加入SET NOCOUNT ON就可以了。 尽量减少与服务器的通信次数。如果你有几个相关的操作要执行,请把它们合并为一个存储过程,或者是一个可以在服务器上作为脚本执行的复合查询。ADO语句避免使用方法(比如Refresh)和不适当的Parameters集合引用,ADO语句会强制ADO增加额外的服务器通信过程。#t#
在客户机/服务器应用中,只构造Command对象一次,而不是每次使用Command对象的时候重新构造。你可以重新设置Command的参数值,然后在需要时执行它。 当查询返回的不是一个记录集时,确保使用了adExecuteNoRecords选项,告诉ADO越过所有那些用来接收和构造记录集(Recordset格式)的代码。你可以把adExecuteNoRecords选项传递给Execute方法,或把它作为Command的选项。
执行返回简单记录集的存储过程时,不要使用Command对象。ADO语句所有的存储过程(以及Command对象)可以作为Connection对象的COM方法出现。让存储过程作为Connection对象的方法出现有着显著的性能优势,同时它也简化了代码。
尽管这种技术对于那些有Return Status值或Output参数的存储过程没有什么帮助,但对于动作查询(INSERT、DELETE等)以及那些返回一个或多个记录的查询来说,这种技术很有用。把存储过程作为Connection的方法之后,你可以用方法参数的形式传入存储过程的输入参数;如果调用存储过程返回了一个记录集,你可以通过方法调用中最后一个参数引用该Recordset。例如,下面的ADO语句执行一个名为“Fred”的存储过程,Fred存储过程有两个输入参数,返回一个Recordset: