set con=server.createobject("ADODB.Connection")
dns="Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=;Password=;Data Source="
con.Open "ETSD","user","password"
sql=""
SET rs=con.Execute(sql)
'-------------------------------------------------
dim con,rs,driver_name
driver_name="Provider=MSDAORA.1;Password=;User ID=;Data Source=;Persist Security Info=True"
set con = server.CreateObject("adodb.connection")
con.open driver_name
set rs=server.CreateObject("adodb.recordset")
dns="Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=;Password=;Data Source="
con.Open "ETSD","user","password"
sql=""
SET rs=con.Execute(sql)
'-------------------------------------------------
dim con,rs,driver_name
driver_name="Provider=MSDAORA.1;Password=;User ID=;Data Source=;Persist Security Info=True"
set con = server.CreateObject("adodb.connection")
con.open driver_name
set rs=server.CreateObject("adodb.recordset")
是你的asp文件没弄好
你看一下你写的程序是否有问题你是不是没有写
rs.Close
set rs = nothing
所以,recordset的cursorlocation要设置成aduserclient(客户端)。这样大量的查询(readonly recordset)就可以先释放连接,再去记录集的数据。
那么,代码一般来说是这样的。
set con=server.createobject("ADODB.Connection")
conn.open ....
set rs=server.CreateObject("adodb.recordset")
rs.cursorlocation=aduserclient(自己定义的常量,最好查一下aduserclient的具体数值)
rs.open "select ...",conn,adOpenStatic, adLockReadOnly
set rs.activeconnection=nothing
conn.close
set conn=nothingdo while not rs.eof
.....
rs.movenext
loop
"Dbq=myDBName;" & _
"Uid=myUsername;" & _
"Pwd=myPassword"odbc连接需要设置以下参数:
set rs1 = Server.CreateObject("ADODB.Recordset")
rs1.ActiveConnection = MM_conn_STRING
rs1.Source = "SELECT DEPARTMENT, DEPARTMENTNO, EXPERTNAME, EXPERTNO, IMAGE, SYNOPSIS, TYPENUM, ZC, SPECNAME, SPECNO FROM ZDWY.EXPERT_VIEW1 WHERE TYPENUM = '1' AND SPECNO='" + Replace(v_specno, "'", "''") + "'"
rs1.CursorType =2
rs1.CursorLocation = 3
rs1.LockType = 3
rs1.Open()
这两句属性设置好才能分页
rs1.CursorType =2
rs1.CursorLocation = 3
分页程序是自己写的,跟怎么连数据库没有关系
你看一下你写的程序是否有问题你是不是没有写
rs.Close
set rs = nothing
使用下面两个连接1。-- 0040
<%
Set OraSession=server.CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase=OraSession.OpenDatabase("O1234","5000/5000",Cint(0))
%>2。-- OLE DB
<%
set conn=server.createobject("ADODB.CONNECTION")
connstr="Provider=OraOLEDB.Oracle;Persist security INFO=False;User
%>就可以读出CLOB这样的数据类型的全部内容!但是!dllhost.exe的进程,刷新一次就长一次!直到IIS崩溃,内存有释放)我说了!释放没有问题!同样的程序在--- ODBC的连接下用就释放!dllhost.exe的进程,长很慢!刷新一次,后就有释放!
======================================--- ODBC
set conn=server.createobject("ADODB.CONNECTION")
connstr="Data Source=XXX;User ID=XXX;password=XXX;"无法完全读出CLOB这样的数据类型的全部内容!我统计了一下就大约3000个字符!为了解决问题我使用循环方法:
=======================================================================
1.方法<!--#include file="inc/conn.asp"-->
<%
sql="SELECT XXX FROM XXXXX"
Set rs =conn.execute(sql)size =32765i=0Do
text=rs.Fields("XXXXX").GetChunk(size)
Response.binarywrite text
text_size=Lenb(text)
i=i+1
Loop until text_size<size
rs.close
set rs=nothing
conn.close
set conn=nothing
%>结果:Response.binarywrite text
输出的内容有乱码!而且不全!!
Response.ywrite text
输出的内容没有乱码!但是不全!!2方法
<!--#include file="inc/conn.asp"-->
<%
sql="SELECT XXX FROM XXXXX"
Set rs =conn.execute(sql)Size=65280
I=0DoText=Rs.Fields("XXX").DbGetChunk(I*Size,Size)Response.write Text
Text_Size=Lenb(Text)I=I+1Loop until Text_Size<Size rs.close
set rs=nothing
conn.close
set conn=nothing
%>结果:Response. write text
输出的内容为空各位请帮帮看看?
1,-- OLE DB 2,--- ODBC得出的结果是1,-- OLE DB 可以读出CLOB这样的数据类型的(全部内容)!但是!dllhost.exe的进程,刷新一次就长一次!直到IIS崩溃,内存没有释放!主要是长的很快!一次大约长1500KB的内存!2,--- ODBC 连接下以读出CLOB这样的数据类型的(部分内容)用就释放!dllhost.exe的进程,长很慢!刷新一次,后就有释放(一点)!
所以,recordset的cursorlocation要设置成aduserclient(客户端)。这样大量的查询(readonly recordset)就可以先释放连接,再去记录集的数据。“说的不是太明白!尤其是"recordset的cursorlocation要设置成aduserclient(客户端)??"。不明白,我去去试是看看!
这两句属性设置好才能分页
rs1.CursorType =2
rs1.CursorLocation = 3
用odbc连接,这两个属性至关重,否则分面数永远是-1
var adOpenForwardOnly = 0;
var adOpenKeyset = 1;
var adOpenDynamic = 2;
var adOpenStatic = 3;//---- CursorLocationEnum Values ----
var adUseServer = 2;
var adUseClient = 3;
var adLockReadOnly = 1;
var adLockPessimistic = 2;
var adLockOptimistic = 3;
ConnectString="provider=msdnora;user id=uid;password=pwd;data source=service"
注意user id 不能写成Uid
password不能写成pwd;
service为数据库服务名
分页时
要先建立记录集对象
var rs = Server.CreateObject("ADODB.Recordset");
rs为分页是用到的记录集对象
rs.CursorType = 2;
rs.CursorLocation = 3;
用完rs要关闭
rs.close();
最后需要关闭连接对象
conn.close();
应是provider=msdaora
关于ado的connection pool问题,你可以去查一下,microsoft的文档,ado会自动pool连接。但是,你编程的时候,要能够充分利用这个feature。
对于只读的查询,大部分的人是这么写的:
cn.open ....
rs.open sql_str,cn,...
do while not rs.eof
....
rs.movenext
loop
rs.close
cn.close看起来,也没什么问题,但是此时,这个连接是被这个asp的session独占的,因此,这样的asp代码没有充分利用到ado的connection pool特性。
应该,比较好的写法应该是
cn.open ....
rs.cursorlocation=aduserclient '使用客户端游标
rs.open sql_str,cn,...
set rs.activeconnection=nothing '把记录集和连接的关系断开
cn.close '马上就可以释放连接
do while not rs.eof
....
rs.movenext
loop
rs.closehaiznan(风林火山) ,你比较喜欢武田信玄吧,呵呵,我也很喜欢这个日本战国时代的名将。
有空,我们交流交流。
<%
on error resume next
set conn=server.createobject("ADODB.CONNECTION")
connstr="Provider=OraOLEDB.Oracle.1;User ID=dbusers;password=007;Data Source=ready;"
'connstr="Provider=msdaora;Data Source=aaa;User Id=aaa;Password=aaa;"
if err then
err.clear
else
conn.open connstr
if err then
err.clear
end if
end if
%>程序:<!--#include file="../conn/conn.asp"--><%
set rs=Server.CreateObject("adodb.Recordset") sql="select id,a_id,a_main,a_user,a_time,a_content,a_image,a_image_show from b_revert where a_main='"& id &"' and a_pub=1 order by id asc "
rs.open sql , conn , 3 ,1 if rs.eof or rs.bof then
response.write "没有信息!"
else
do while not rs.eof
%>
<TABLE cellSpacing=0 width="100%" align=center border=0>
<TBODY>
<TR>
<TD align=right width=100></TD>
<TD align=middle><FONT color=green size=-1>作者:</FONT><a
href="info.asp?a_user=<%=rs("a_user")%>" target="_blank"><FONT color=blue size=-1><%=rs("a_user")%></FONT></a><FONT color=green size=-1> 提交日期:<%=rs("a_time")%></FONT></TD>
<TD align=right width=100></TD>
</TR>
</TBODY>
</TABLE>
<div class=content>
<br>
<%=rs("a_content")%>
<br>
<br>
</div>
<% rs.movenext
loop
end ifrs.close
set rs=nothing
conn.close
set conn=nothing
%> 用下面的方法好象不行输出为空值!该怎么写呢!..help............?
====================
set con=server.createobject("ADODB.Connection")
conn.open ....
set rs=server.CreateObject("adodb.recordset")
rs.cursorlocation=aduserclient(自己定义的常量,最好查一下aduserclient的具体数值)
rs.open "select ...",conn,adOpenStatic, adLockReadOnly
set rs.activeconnection=nothing
conn.close
set conn=nothingdo while not rs.eof
.....
rs.movenext
loop
conn.open "Provider=MSDAORA.1;Password=007;User ID=dbusers;Data Source=ready;Persist Security Info=True"
set rs=server.CreateObject("adodb.recordset")
rs.cursorlocation=3
rs.open "select ...",conn,2,3
set rs.activeconnection=nothing
conn.close
set conn=nothingdo while not rs.eof
.....
rs.movenext
loop
通常使用客户端游标才支持ado的recordcount(等一系列)属性,关于该问题你可以参考关于不同提供者实现ado属性的说明,mdac联机文档中就有
如下:conn.open "provider=msdaora.1;data source=;user id=xxxx;password=xxxx"
如果是大量数据用oracle的orasession
不论哪种方法,服务器都没有宕过
先谢谢beckhambobo(beckham) 斑主!!也谢谢个位高手enhydraboy(乱舞的浮尘)。等等!