ASP技巧TOP 10(转)

技巧

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( "It's 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

时间: 2024-12-24 00:23:00

ASP技巧TOP 10(转)的相关文章

ASP技巧TOP 10(转)(四)

技巧 9.如何更新被锁定的DLL如果你正在使用Visual Basic COM组件,一定知道更新组件版本时候所出现的错误信息"不能更新DLL文件,访问禁止",或许已经有好多次被它挡驾了.下面我们介绍的是一个小巧的批命令文件,你可以用它来自动启动或关闭锁定DLL文件的MTS. 问: 我们所用的IIS 4.0上运行着ASP和一个Visual Basic 6.0 DLL文件,DLL文件用来为ASP页面提供数据服务.问题是,当我们想要把Web服务器上的DLL升级到新的版本时,系统总是显示DLL

ASP技巧TOP 10(四)

技巧 9.如何更新被锁定的DLL如果你正在使用Visual Basic COM组件,一定知道更新组件版本时候所出现的错误信息"不能更新DLL文件,访问禁止",或许已经有好多次被它挡驾了.下面我们介绍的是一个小巧的批命令文件,你可以用它来自动启动或关闭锁定DLL文件的MTS. 问: 我们所用的IIS 4.0上运行着ASP和一个Visual Basic 6.0 DLL文件,DLL文件用来为ASP页面提供数据服务.问题是,当我们想要把Web服务器上的DLL升级到新的版本时,系统总是显示DLL

ASP技巧TOP 10(转)(三)

技巧 6.处理数据库日期值1099 如果说包含引号的字符串会带来问题的话,那么对我们的某些读者来说向数据库传递日期数据更是容易出错.下面我们根据所用数据库系统的类型分别解释如何正确地完成这一任务. 问: 如何使用ASP向数据库传递日期数据? 答: 答案与所用数据库类型有关.假设我们使用名为"strDate"的变量保存日期数据,如果使用Access数据库,那么生成字符串的代码为: strSQL = " 合法的SQL命令 " & "#" &a

ASP技巧TOP 10(转)(二)

技巧 3.数据库搜索技巧1082 在数据库搜索中,如果我们只使用等于符号搜索"Pro"是无法提取出那些能够匹配"ASP Pro"的记录的.下面我们要介绍的是如何使用SQL的LIKE操作符实现部分文本搜索. 问: 从数据库提取记录集时,是否有可能提取那些包含比我所指定的文本更多内容的记录,且不对搜索文本的出现位置有具体要求? 例如: StrName = 'Direct'RSShops = Server.CreateObject("ADODB.Recordse

ASP技巧TOP 10(一)

技巧 1.避免使用DSN连接数据库1054 是否仍旧在使用ODBC系统或文件DSN连接数据库?请用OLEDB提供者代替它,这是一种速度更快而且不需要使用DSN的数据库连接技术.使用OLEDB提供者,你不必再为了创建系统DSN恳求ISP(或数据库管理员/网站管理员),也不必为了网站文件位置的变化而修改配置. 问: 我看到过大量通过数据资源名字(DSN)连接数据库的例子,不过我现在想不通过DSN连接数据库.在ASP中可以实现这一点吗?能否举几个具体的例子说明?我希望新的连接方法不依赖于系统DSN,但

ASP技巧TOP 10(二)

技巧 3.数据库搜索技巧1082 在数据库搜索中,如果我们只使用等于符号搜索"Pro"是无法提取出那些能够匹配"ASP Pro"的记录的.下面我们要介绍的是如何使用SQL的LIKE操作符实现部分文本搜索. 问: 从数据库提取记录集时,是否有可能提取那些包含比我所指定的文本更多内容的记录,且不对搜索文本的出现位置有具体要求? 例如: StrName = 'Direct'RSShops = Server.CreateObject("ADODB.Recordse

ASP技巧TOP 10(三)

技巧 6.处理数据库日期值1099 如果说包含引号的字符串会带来问题的话,那么对我们的某些读者来说向数据库传递日期数据更是容易出错.下面我们根据所用数据库系统的类型分别解释如何正确地完成这一任务. 问: 如何使用ASP向数据库传递日期数据? 答: 答案与所用数据库类型有关.假设我们使用名为"strDate"的变量保存日期数据,如果使用Access数据库,那么生成字符串的代码为: strSQL = " 合法的SQL命令 " & "#" &a

Tomcat配置技巧Top 10排行榜

技巧 1.配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面.Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手.Tomcat的Admin Web Application最初在4.1版本时出现,当时的功能包括管理context.data source.user和group等.当然也可以管理像初始化参数,user.group.role的多种数据库管理等.在后

Tomcat配置技巧Top 10 [ZT]

技巧 你所需要做的就是:按照你的需求配置Tomcat,只要你正确配置,Tomcat一般都能适合你的要求.下面是一系列关于Tomcat的配置技巧,这些技巧源自于我的书:<Tomcat权威指南>,希望对你有所帮助. Jason Brittain 1. 配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面.Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手.To