⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0114.htm

📁 ASP教程宝典 书籍语言: 简体中文 书籍类型: 网络编程 授权方式: 免费软件 书籍大小: 500 KB
💻 HTM
字号:
<html>

<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1  {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
    <p align="center"><big><strong>ASP技巧TOP10 (1)</strong></big></p>

<div align="right">---摘自互联网</div>

1、避免使用DSN连接数据库<br>
是否仍旧在使用ODBC系统或文件DSN连接数据库?请用OLEDB提供者代替它,这是一种速度更快而且不需要使用DSN的数据库连接技术。使用OLEDB提供者,你不必再为了创建系统DSN恳求ISP(或数据库管理员/网站管理员),也不必为了网站文件位置的变化而修改配置。 <br>
<br>
问:<br>
   我看到过大量通过数据资源名字(DSN)连接数据库的例子,不过我现在想不通过DSN连接数据库。在ASP中可以实现这一点吗?能否举几个具体的例子说明?我希望新的连接方法不依赖于系统DSN,但又可以在数据库连接串中指定驱动程序、服务器名字、数据库、数据库账号和密码。 <br>
<br>
   答: <br>
<br>
   如果你使用的是SQL Server 7,请使用下面的数据库连接串:<br>
   <br>
strConnString = &quot;DSN='';DRIVER={SQL SERVER};&quot; &amp; _ <br>
&quot;UID=myuid;PWD=mypwd;&quot; &amp; _ <br>
&quot;DATABASE=MyDb;SERVER=MyServer;&quot; <br>
<br>
<br>
<br>
<br>
   其中最重要的参数在于“DRIVER=”部分。如果你希望绕过ODBC,直接通过OLEDB访问SQL Server(一般来讲这种方法速度更快),请使用下面这种连接串:    <br>
strConnString =&quot;Provider=SQLOLEDB.1;Password=mypassword;&quot; &amp; _ <br>
&quot;Persist Security Info=True;User ID=myuid;&quot; &amp; _ <br>
&quot;Initial Catalog=mydbname;&quot; &amp; _ <br>
&quot;Data Source=myserver;Connect Timeout=15&quot; <br>
<br>
<br>
<br>
<br>
   如果你要使用数据库连接串,但又不熟悉OLEDB提供者的连接串语法,请使用Visual Basic的数据环境设计器或ADO数据控件创建一个,然后把它拷贝出来用于ADO连接对象就可以了。在立即窗口中,输入命令? dataenvironment1.connection1.ConnectionString可以得到连接串的代码。请注意Microsoft Access连接串的语法有所不同,参见《Syntax for DSN-Less Connection for MS Access》 <br>
<br>
   参见:《ASP性能优化指南》中的数据库连接部分。 <br>
<br>
2、记录集中记录总数的计算<br>
1062<br>
<br>
<br>
   刚开始在ASP页面中使用记录集的时候可能经常会遇到这个问题。如果你想访问记录集中的数据,首先必须保证记录集中确实包含数据。请记住,如果记录集中没有数据,系统将显示非常不友好的运行时错误信息。你可以使用下面的代码去解决这种问题。 <br>
<br>
   问: <br>
<br>
   我已经有数年的VB经验,但刚刚开始学习ASP和VBScript。现在我要打开一个Access数据库,计算其中的记录总数并在Web页面中显示这些信息。数据库的名字叫sean.mdb,其中包含一个people表,表中有三个记录。然而,当我运行脚本时它总是说有-1个记录。 <br>
<br>
   是否可以告诉我下面的代码什么地方出错了?    <br>
&lt; % <br>
<br>
Set objConn = Server.CreateObject(&quot;ADODB.Connection&quot;)<br>
Set objRst = Server.CreateObject(&quot;ADODB.Recordset&quot;)<br>
<br>
objConn.Open(&quot;DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=<br>
&quot; &amp; Server.Mappath(&quot;seannewelldbsean.mdb&quot;))<br>
<br>
strSQL = &quot;SELECT * FROM people&quot;<br>
<br>
objRst.Open strSQL, objConn <br>
<br>
Response.write( &quot;&lt; P &gt;&quot; &amp; strSQL &amp; &quot;&lt; /P &gt;&quot; )<br>
Response.write(&quot;&lt; H2 &gt;There are &quot; &amp; objRst.RecordCount &amp; <br>
&quot; People in the database&lt; /H2 &gt;&quot;)<br>
<br>
If objRst.RecordCount&nbsp;&nbsp;&gt; 0 Then<br>
&nbsp;&nbsp;&nbsp;objRst.MoveFirst<br>
&nbsp;&nbsp;&nbsp;Do While Not objRst.EOF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.write( &quot;Name = &quot; &amp; objRst.fields(0) )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objRst.MoveNext<br>
&nbsp;&nbsp;&nbsp;Loop<br>
else<br>
&nbsp;&nbsp;&nbsp;Response.write( &quot;It's EMPTY!&quot; )<br>
End If<br>
<br>
objRst.Close<br>
Set objRst = Nothing<br>
objConn.Close<br>
Set objConn = Nothing<br>
% &gt;<br>
<br>
<br>
<br>
<br>
   答: <br>
<br>
   在低版本的MDAC中RecordCount属性返回-1。请在你的服务器上把MDAC文件更新到最新的版本,最新的MDAC文件可以在www.microsoft.com/data找到。 <br>
<br>
   如果Web服务器由ISP管理而你又无权配置它,无法升级MDAC文件,那么必须修改代码。 <br>
<br>
   原来使用下面的代码检查记录集中是否有记录:    <br>
If objRst.RecordCount&nbsp;&nbsp;&gt; 0 Then ...<br>
<br>
<br>
<br>
<br>
   请改用下面的代码:    <br>
&nbsp;&nbsp;&nbsp;If objRst.BOF and objRst.EOF Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' 记录集为空<br>
&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Do While not objRst.EOF<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' 处理记录集<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objRst.MoveNext<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loop<br>
&nbsp;&nbsp;&nbsp;End If<br>
<br>
<br>
<br>
<br>
   2000年06月30日更新,新西兰的Daryl Egarr说: <br>
<br>
   可以看出,读者提问中的代码并没有错误。问题在于“在低版本的MDAC中RecordCount属性返回-1”,这一判断本身并没有错误,然而从提问内容来看作者不应该作出这种假定,因为原问题中没有任何一行代码意味着使用了低版本的MDAC。 <br>
<br>
   作者考虑问题的方向不对,问题的要点在于并非所有的游标类型都支持所有的属性和方法(不管采用哪种数据库系统)。问题中代码出现错误的真正原因在于使用默认的CursorLocation时:    <br>
Recordset.CursorLocation = adUseServer<br>
<br>
   RecordCount属性只有在记录集的CursorType为1或者3(即adOpenKeyset,adOpenStatic)时才是可用的。出现错误的代码没有指定CursorType,也就是使用了0类型的游标(即adOpenForwardOnly,这是速度最快的游标类型),此时对RecordCount的引用将一直返回0。 <br>
<br>
   解决问题的方法很简单,只要把原来代码中的:    <br>
objRst.Open strSQL, objConn <br>
<br>
   改成:    <br>
objRst.Open strSQL, objConn ,1

  </table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -