打印本文 打印本文  关闭窗口 关闭窗口
ADO如何善用RecordSet组件呢?
作者:采集员 文章来源:来源于网络 点击数: 更新时间:2005/9/10 12:31:53
?了善用RecordSet物件,RecordSet物件?有?多有用的?性和方法,?我?再??:

Filter?性:於ReecordSet?定搜???的?件,只?示合乎?件的?料。
Clone方法:??一份RecordSet。
CacheSize?性:?定或得知RecordSet?存(cache)於???的的????。
Filter?性

?由SELECT等指令?查?存放到RecordSet的??,仍然可以於RecordSet中再?定搜???的?件,方法?使用Filter?性。

Filter?性,於ReecordSet?定搜?的???件,只?示合乎?件的?料。

?我?看一?於ASP程式??中使用Filter?性的例子。

譬如ASP程式?rs19.asp如下,Filter?定?rs2.Filter = "出版='松?'",表示只要搜? [出版] ?位? [松?] 的??:

<%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT * From 著作"

rs2.Open SqlStr,conn1,1,1

rs2.Filter = "出版='松?'"

%>

<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<TR>

<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">?名</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">出版</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">?片</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">?介</FONT></TD>

<% Do while not rs2.EOF %>

<TR>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("?名") %></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("出版") %></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("?片") %></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("?介") %></TD>

</TR>

<% rs2.MoveNext %>

<% Loop %>

</TABLE>

<% rs2.Close %>

以上的 ASP程式?rs19.asp,於用?端使用??器,???行的?果,?示??後的?果,只?示合乎?件的?料。

CacheSize?性

CacheSize?性,?定或得知RecordSet?存(cache)於???的的????,??值?1。

譬如您若?CacheSize?定?10?,ADO首先?前10?的???存(cache)放到本??????器(local memory buffer)?中,一旦您移?到最末的第10????,ADO?存(cache)第二?10???。

若要更新?存(cache)的??,可使用Resync方法。

?我?看一?於ASP程式??中使用CacheSize的例子。

譬如ASP程式?rs18.asp如下,??例子??品?料表的?料由第一?逐一移?到最末?,??循?做了100次,?算?共花了多少??,比?有和?有?定CacheSize的?行效能差?:

<%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT * From ?品"

rs2.Open SqlStr,conn1,1,1

t1 = Timer

For i = 1 to 100

rs2.MoveFirst

Do while not rs2.EOF

A = rs2(0)

rs2.MoveNext

Loop

Next

t2 = Timer

Response.Write "<BR>??CacheSize: " & CINT(t2 - t1)

rs2.MoveFirst

rs2.CacheSize = 10

t2 = Timer

For i = 1 to 100

rs2.MoveFirst

Do while not rs2.EOF

A = rs2(0)

rs2.MoveNext

Loop

Next

t2 = Timer

Response.Write "<BR>有?CacheSize: " & CINT(t2 - t1)

%>

<% rs2.Close %>

由本例,未?定CacheSize,花了6秒??就完成。?CacheSize?定?10?,反而花了9秒??才完成。可?CacheSize?小心使用,否??影??行的效能。

Clone方法

Clone方法,??一份RecordSet。

有?候想?理一下RecordSet,譬如使用如上的Filter?性,於ReecordSet?定搜?的???件,RecordSet就被?更,此?若又想保留原RecordSet?,就可以使用Clone方法,先??一份RecordSet,再?理??的那一份。

?我?看一?於ASP程式??中使用Clone的例子。

譬如ASP程式?rs12.asp如下,使用Set rs1 = rs.Clone?rs 的RecordSet??一份到rs1的RecordSet?中:

<%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT * FROM 著作"

rs.Open SqlStr,conn1,1,1

Set rs1 = rs.Clone

%>

<Center>

<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>

<TR>

<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">?名</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">出版</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">?片</FONT></TD>

<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">?介</FONT></TD>

</TR>

<%

Do While Not rs1.EOF

%>

<TR>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("?名")%></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("出版")%></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("?片")%></TD>

<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("?介")%></TD>

</TR>

<% rs1.MoveNext

Loop

rs1.Close %>

</TABLE>

以上的 ASP程式?rs12.asp,於用?端使用??器,???行的?果,?示????的那一份rs1的RecordSet。

DSN data source

?我?想得知DSN data source的?????,可以直接????示出?。

?我?看一?於ASP程式??中得知DSN data source????的例子。

譬如ASP程式?rs11.asp如下:

<%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Response.Write(conn1)

%>

以上的 ASP程式?rs11.asp,於用?端使用??器,???行的?果,使用Response.Write(conn1),即可?示DSN data source的????。

OpenSchema

OpenSchema方法,可得知SQL Server某一??料?的?料表??。

?我?看一?於ASP程式??中使用OpenSchema的例子,?先安?本?所附「?站???用精?」光碟片,以便自?於SQL Server建立comPak?料?。

譬如ASP程式?rs30.asp如下:

<%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "driver={SQL Server};server=(Local);uid=sa;pwd=;database=comPak"

set rs = conn1.OpenSchema(20) 'adSchemaTables

Do while not rs.EOF

Response.Write "<BR>" & rs("TABLE_NAME") & ": " & rs("TABLE_TYPE")

rs.MoveNext

Loop

%>

以上的 ASP程式?rs30.asp,於用?端使用??器,???行的?果,由set rs = conn1.OpenSchema(20) 取得SQL Server 的comPak?料?的?料表??,其中rs("TABLE_NAME")取得?料表名?,rs("TABLE_TYPE")取得?料表?型。



打印本文 打印本文  关闭窗口 关闭窗口