欢迎光临
我们一直在努力

ASP技巧TOP 10(一)

建站超值云服务器,限时71元/月

1、避免使用dsn连接数据库

1054

   是否仍旧在使用odbc系统或文件dsn连接数据库?请用oledb提供者代替它,这是一种速度更快而且不需要使用dsn的数据库连接技术。使用oledb提供者,你不必再为了创建系统dsn恳求isp(或数据库管理员/网站管理员),也不必为了网站文件位置的变化而修改配置。

   问:

   我看到过大量通过数据资源名字(dsn)连接数据库的例子,不过我现在想不通过dsn连接数据库。在asp中可以实现这一点吗?能否举几个具体的例子说明?我希望新的连接方法不依赖于系统dsn,但又可以在数据库连接串中指定驱动程序、服务器名字、数据库、数据库账号和密码。

   答:

   如果你使用的是sql server 7,请使用下面的数据库连接串:

  

strconnstring = "dsn=;driver={sql server};" & _

"uid=myuid;pwd=mypwd;" & _

"database=mydb;server=myserver;"

   其中最重要的参数在于“driver=”部分。如果你希望绕过odbc,直接通过oledb访问sql server(一般来讲这种方法速度更快),请使用下面这种连接串:   

strconnstring ="provider=sqloledb.1;password=mypassword;" & _

"persist security info=true;user id=myuid;" & _

"initial catalog=mydbname;" & _

"data source=myserver;connect timeout=15"

   如果你要使用数据库连接串,但又不熟悉oledb提供者的连接串语法,请使用visual basic的数据环境设计器或ado数据控件创建一个,然后把它拷贝出来用于ado连接对象就可以了。在立即窗口中,输入命令? dataenvironment1.connection1.connectionstring可以得到连接串的代码。请注意microsoft access连接串的语法有所不同,参见《syntax for dsn-less connection for ms access》

   参见:《asp性能优化指南》中的数据库连接部分。

2、记录集中记录总数的计算

1062

   刚开始在asp页面中使用记录集的时候可能经常会遇到这个问题。如果你想访问记录集中的数据,首先必须保证记录集中确实包含数据。请记住,如果记录集中没有数据,系统将显示非常不友好的运行时错误信息。你可以使用下面的代码去解决这种问题。

   问:

   我已经有数年的vb经验,但刚刚开始学习asp和vbscript。现在我要打开一个access数据库,计算其中的记录总数并在web页面中显示这些信息。数据库的名字叫sean.mdb,其中包含一个people表,表中有三个记录。然而,当我运行脚本时它总是说有-1个记录。

   是否可以告诉我下面的代码什么地方出错了?   

< %

set objconn = server.createobject("adodb.connection")

set objrst = server.createobject("adodb.recordset")

objconn.open("driver={microsoft access driver (*.mdb)}; dbq=

" & server.mappath("seannewelldbsean.mdb"))

strsql = "select * from people"

objrst.open strsql, objconn

response.write( "< p >" & strsql & "< /p >" )

response.write("< h2 >there are " & objrst.recordcount &

" people in the database< /h2 >")

if objrst.recordcount > 0 then

objrst.movefirst

do while not objrst.eof

response.write( "name = " & objrst.fields(0) )

objrst.movenext

loop

else

response.write( "its empty!" )

end if

objrst.close

set objrst = nothing

objconn.close

set objconn = nothing

% >

   答:

   在低版本的mdac中recordcount属性返回-1。请在你的服务器上把mdac文件更新到最新的版本,最新的mdac文件可以在www.microsoft.com/data找到。

   如果web服务器由isp管理而你又无权配置它,无法升级mdac文件,那么必须修改代码。

   原来使用下面的代码检查记录集中是否有记录:   

if objrst.recordcount > 0 then …

   请改用下面的代码:   

if objrst.bof and objrst.eof then

记录集为空

else

do while not objrst.eof

处理记录集

objrst.movenext

loop

end if

   2000年06月30日更新,新西兰的daryl egarr说:

   可以看出,读者提问中的代码并没有错误。问题在于“在低版本的mdac中recordcount属性返回-1”,这一判断本身并没有错误,然而从提问内容来看作者不应该作出这种假定,因为原问题中没有任何一行代码意味着使用了低版本的mdac。

   作者考虑问题的方向不对,问题的要点在于并非所有的游标类型都支持所有的属性和方法(不管采用哪种数据库系统)。问题中代码出现错误的真正原因在于使用默认的cursorlocation时:   

recordset.cursorlocation = aduseserver

   recordcount属性只有在记录集的cursortype为1或者3(即adopenkeyset,adopenstatic)时才是可用的。出现错误的代码没有指定cursortype,也就是使用了0类型的游标(即adopenforwardonly,这是速度最快的游标类型),此时对recordcount的引用将一直返回0。

   解决问题的方法很简单,只要把原来代码中的:   

objrst.open strsql, objconn

   改成:   

objrst.open strsql, objconn ,1

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP技巧TOP 10(一)
分享到: 更多 (0)