您的位置:首页 > 其它

胡言乱语最近学习中发现的技术小问题!

2005-04-09 16:18 387 查看
前几天准备到一家电脑学院里去试讲WEB开发的课程,想了一会,不知道讲什么内容才好。个人觉得凡是和WEB相关的运用大多都是和数据库产生一些交互查询。所以我觉得还是讲点连接数据库方面的内容最好。因为可以说这是很多问题的基本切入点。查资料的过程中,我看到其中一篇关于VBscript和JScript的文章,真是又有一些对数据库连接Connection对象的新认识。(反正我是发现,学习,越往后,自己会发现自己是多么的渺小)

《如何使用 VBScript 和 JScript 在 ASP 中创建不连续的 ADO 记录集》
注意:1、http://support.microsoft.com/default.aspx?scid=kb;zh-cn;289531#appliesto
2、Microsoft Knowledge Base Article - 289531

全文是这样的(转载,学习)
本文介绍一种当使用 Microsoft VBScript 和 Microsoft JScript 编程时,在 Active Server Page (ASP) 中创建 ActiveX 数据对象 (ADO) 非连接记录集的方法。本文假定读者熟悉 ADO 和 ASP。

ASP 的原则之一是尽快释放 ADO 对象,从而释放这些对象所使用的系统资源。ADO 非连接记录集这一功能允许记录集在没有活动连接时也能存在;这可以节省数据库服务器资源并提高伸缩性。ADO 非连接记录集要求使用客户端游标,这可以通过将Connection 对象的 CursorLocation 属性设置为adUseClient 来实现。

下面的示例代码使用 Microsoft OLEDB Provider for SQL Server (SQLOLEDB) 连接到随 SQL Server 安装一起提供的 Northwind 示例数据库。要运行这些示例,需修改连接字符串和 SELECT 语句以适应您的环境。另外,还要为 ADO 常量的 Include 文件设置正确的路径。
VBScript 中的非连接记录集
<%@Language="VBScript"%>

<%
' Connection string.
strCon = "Provider=sqloledb;Data Source=myServer;Initial Catalog=Northwind;User Id=myUser;Password=myPassword"

' Create the required ADO objects.
Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.recordset")

' Open the connection.
conn.Open strCon

' Retrieve some records.
strSQL = "Select * from Shippers"
rs.CursorLocation = adUseClient
rs.Open strSQL, conn, adOpenStatic, adLockOptimistic

' Disconnect the recordset.
Set rs.ActiveConnection = Nothing

' Release the connection.
conn.Close

' Check the status of the connection.
Response.Write("
Connection.State = " & conn.State)

Set conn = Nothing

' Use the diconnected recordset here.

' Release the recordset.
rs.Close
Set rs = Nothing
%>

注意,记录集是通过将ActiveConnection 属性设置为 Nothing 断开连接的。
JScript 中的非连接记录集
<%@Language="JScript"%>

<%
// Connection string.
var strCon = "Provider=sqloledb;Data Source=myServer;Initial Catalog=Northwind;User Id=myUser;Password=myPassword";

// Create the required ADO objects.
conn = Server.CreateObject("ADODB.Connection");
rs = Server.CreateObject("ADODB.recordset");

// Open the connection.
conn.Open(strCon);

// Retrieve some records.
var strSQL = "Select * from Shippers";
rs.CursorLocation = adUseClient;
rs.Open(strSQL, conn, adOpenStatic, adLockOptimistic);

// Disconnect the recordset.
DisconnectRecordset(rs);

// Release the connection.
conn.Close();

// Check the status of the connection.
Response.Write("
Connection.State = " + conn.State);

conn = null;

// Use the diconnected recordset here.

// Release the recordset.
rs.Close();
rs = null;
%>

Sub DisconnectRecordset(rs)
Set rs.ActiveConnection = Nothing
End Sub

备注:在前面的代码中,不能将以下代码行 DisconnectRecordset(rs);

替换为以下某个代码行来创建断开连接的记录集: rs.ActiveConnection = null;
- 或 -

delete(rs.ActiveConnection);

有另外一种方法可以创建非连接记录集。JScript 中没有与 VBScript 中的Nothing 关键字(用来释放 ActiveX 对象)类似的关键字。要实现这一点,可以使用与下面的 Web 站点中提供的方法类似的方法: http://www.netspace.net.au/~torrboy/code/jargutil
在本例中,示例代码可能类似于下面这样:
var oUtil = Server.CreateObject("Torrboy.JArgUtility");
rs.ActiveConnection = oUtil.Nothing;

************************************************

说实在话,以前看了很多的ASP程序,我都没注意过关键的这句话“ADO 非连接记录集要求使用客户端游标,这可以通过将Connection 对象的 CursorLocation 属性设置为adUseClient 来实现。”不知道大家看了没有CursorLocation对象的adusClient属性值。马上找了几本我手里有的ASP资料来看,结果都没提到 CursorLocation属性基本上都没提到,我晕。只有一本这样两句话, CursorLocation属性用来设置指针处理的位置,如aduseclient、aduserserver、aduseclientbatch等值。
我是没搞明白。但是现在算是知道怎么用了,在ASP中,我想的是它的这种处理机制和ASP.net里的XML离线存储机制区别在那里呢?我想肯定是有区别是,要不然微软花那么大来做这套基于.Framework的.NET管理数据集做什么呢!?这可是它极力推捧的内容呀!
这里做个记号,算是很看到这篇文章的高手牛人做个交流。

为了这个问题,我看完了几本ASP的书籍里关于connection对象的内容,其中又有新发现(看来是以前真没仔细记下这些内容,汗)

其一:话这样开始,我在记得以前在CSDN的WEB版,好想我看到很多ASP的开发人员,都说connection对象的数据库连接(默认是30秒)。我印象太深了,记到今天我都是记得是30秒。我的一本书里是这样说的,connection对象的属性里有这样两个和时间相关的属性。
1、CommandTimeout属性
定义了允许对数据源的操作终止并且产生一个错误的等待时间。可以利用这个属性来定义在连接业务量很大或服务器很忙时如何操作。当设置该属性时就意味着对谅解的所有操作命令的等待时间都被确定了。包括存储过程的执行和创建Recordset对象时所用的简单的SQL语句。
该属性是一个长整数变量,表示所要等待的秒数。缺省值是30秒,当然可以设置为任意值,如果让它没有时间限制,只需要将其值设置为0即可。
<%
set conn=server.createobject("odbc.connection")
conn.commandtimeout=0
%>
2、connectiontomeout属性
和CommandTimeout属性一样,该属性决定了在连接数据源时的最大连接时间。它并不定义命令的执行时间,它只定义连接数据源时的最长等待时间,它同CommandTimeout属性一样,,是一长整形变量,缺省值为15秒。设置为0,表示没有时间限制。

不用我多说了吧?区别还是很明显的,还不只是数值的问题。

其二:connection对象的Execute方法
Connection对象的主要任务是在最高层控制与数据源之间的交互作用,但是该对象也可以执行SQL语句以及存储过程。但是,要注意,当利用Connection对象来返数据时,要抽取的信息是基本的游标,即只能读和只能够向前的游标。语法:
set recordset=conn.execute(commandtext,recordaffected.option)

这里我只特别说说option参数,它是用来指定commandstring参数的性质。是字符串还是存储过程或者是一个表名称,虽然不是必须的,但是可以得到数据源提供的最好性能。不多说,可以网上找了看看,这方面的内容
提示:commandstring类型:
adcmdtext、adcmdtable、adcmdstoreproc、adcmdunknown

呵!!这个问题我只知道在一次读取显示时使用它比较方便,其实主要是省去我多写一些而已。
那些?conn.open sqlstr,0,0其实这里就是默认的了。可以是这样
conn.open sqlstr
先写到这里,胡言乱语一通,赶着时间出去办事情,过几天在接着说别的内容。让大家见笑!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐