立连接时使用 Application 变量的值。 同时显式创建连接对象: Set conn=Server.CreateObject(“Adodb.connection”)和建立数据 库连接:conn.open Application(“connection_string”),因为隐式使用数据库连接时不能利用缓 冲池的机制。 2)使用适当的光标和锁定模式。如果所做的全部工作只是从记录集中读取数据,并将 其显示在屏幕上,那么就使用缺省的只能前移、只读的记录集。ADO 用来维护记录和锁定 的细节的
工作越少,执行的性能就越高。 3)在读取数据库内容的处理中,使用 Rs.GetRows()的速度最快,其次是 Set Rs(字段编 号)方法。 GetRows()的优势, 在于将查询到的资料以数组记录到内存中, 并可随即将 Recordset 关闭释放。因此,当我们要某字段资料时,不需透过 Recordset 的接口去取得,而直接使用 内存数组内的资料,要知道,Recordset 是很耗
系统资源的,越少使用越好,这方法之所以 有效率就是这原因。 使用数组记录所有资料结果固然是最佳方法, 但这只限于读取多笔资料时, 倘若只有少 数几笔资料时, 数组法执行效率上便不及 Set Rs(字段编号)方法了。 因为使用 Recordset 接口
读取下一笔资料,便要用 Re.MoveNext 让读取的光标移到下一笔资料所在,这方法要占用 系统资源去运算才可达成,比起数组直接呼叫内存,方法当然慢的多。但若只有几笔资料, 也仍然要多占内存和 CPU 去建立数组,再大费周章的将所有数据取出放入其中,这样效果 还远不
如使用几次 Rs.MoveNext 来达成少数资料的读取。 4)多用 Set 来处理数据库连接。只要多用 Set 就比其它同类方法速度还快。上面说过, 我们要少用到 Recordset 便可提高速度。我们使用 Set 将各字段的属性内容,取出放入内存 中再行读取,速度比直接操作 Recordset 接口更快。 5)要时刻注意 ADO 对象是非常消耗资源的,因此一定要牢牢记住,只在用到 ADO 对 象时才创建,用完后马上释放:rs.close 和 set rs=nothing
三、asp 代码在处理数据库时要注意的问题
1)在打开一个数据表的时候仅选择所需的列:当打开 ADO 记录集时,除非需要获 得所有的列,否则不应自动地使用表名(即 SELECT *) 。使用单独的列意味着将减少发送 到服务器或从服务器取出的数据量。 即使需要使用全部列, 单独地命名每个列也会获得最佳 的性能,因为服务器不必再解释这些列的名字[4]。 2)当遍历记录集时一个肯定能提高性能的方法是使用对象变量指向集合中的成员。 While Not Rs.EOF Response.Write "名称:" &; Rs ("M") &; "(代码:" &; Rs ("C") &; ")" Rs.MoveNext Wend 可以用改写为下面的代码以加快执行: set Mc=RsGc("M") set Code=Rs ("C") While Not rs.EOF Response.Write "名称:" &; Mc &; "(代码:" &; Code &; ")" Rs.MoveNext Wend 新的代码建立了对象变量的引用, 所以可以使用对象变量而不是实际的变量, 这意味着 脚本引擎的工作减少了,因为在集合中进行索引的次数变少了。 3)尽量避免使用可更新 Recordset: Rs=Conn.Execute("SELECT * FROM Member WHERE ID=1",3,3) Rs("Name")=" DarkMan "
Rs.Update() 可以用:strSQL = "UPDATE Member SET Name='DarkMan' WHERE AuthorID=1" Conn.Execute strSQL 4)使用数字序列:在 ASP 程序中,从诸如 RecordSet 中读取数据时,为了方便,常使 用数据库列名的方式进行: Response.write rs(“Name”) 而很少采用该数据库列名所在的数字序列来读取,即:Response.write rs(1) 其实,为了从 RecordSet 得到列值,ADO 必须将列名转化为数字序列,因此,若直接 使用数字序列,则可以提高读取速度。若感觉使用数字序列后,程序可读性不直观,可以采 用建立常量的方法,如定义:const Name 1,这样就保证了程序的可读性和读取速度。 5)使用 Response