访问数据库(2)

80酷酷网    80kuku.com

  访问|数据|数据库访问数据库(2)

  大家好,我是武汉华师的sunwen,上一节课我向大家讲述了如何配置ODBC数据源和配置其的作用。今天,我要向大家介绍如何在我们的ASP网页中插入语句,利用我们昨天的劳动成果,来打开一个ACCESS数据库。下面,就让我们来开始吧!

  首先,回忆我们昨天的数据源名是mydb,也就是我们和系统共同认可的一个数据源名,下面,就让我们使用这个数据源名,与系统进行对话。

  第一步,建立ADO对象连接。进行这一步的目的是告诉系统我将要使用数据库了,请为我建立一个到数据库的连接。这一步的语法是:set 变量名=server.createobject("adodb.connection").例:

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

  下面来分析这个语句。首先,objconn这个变量是我们自已定的,它代表一个数据库连接。至于server.createobject("adodb.connection")这个语句,我们一看就可以大致猜出它们的意义,不就是建立一个ADO对象吗?对了,什么是ADO对象呢?唉呀,太麻烦了,不说了,总之,我们在进行每一个数据库的ASP编程时,都要进行这一步。至于道理,我们慢慢会明白的。

  第二步,我们便要利用我们建立的这个连接,来告诉系统我们要打开的数源,这个数据源就是我们上一课设置的数据源名。它就是mydb。利用它,我们可以很方便地打开一个数据库。以我们上一课的设置为例,打开我们的db2.mdb,可以使用以下语法:

objconn.open "dsn=mydb;database=db2;uid=;pwd=;"

  其中dsn就是我们上一课所定的数源名。database就是我们的数据库名。uid是user ID,即用户名,而pwd则是这个用户的访问密码,这只有在我们为这个数据库加入了密码之后才有用,我们暂且不讨论它。细心的读者已经发现第一步和第二步出现了两个objconn,的确,第一步的语句是将一个到数据库的连接赋予objconn这个变量,也就是说,经过第一步,objconn实际上就是代表了这个连接。这样我们自然可以用这个连接的open方法来打开一个数据库了。

  好了,终于打开了这个数据库了,让我们来回忆一下我们前面的语句,大家可以把下面的语名直接复制到你的ASP页中,运行一下试一试:


set objconn=server.createobject("adodb.connection")
objconn.open "dsn=mydb;database=db2;uid=;pwd=;"

如果出现了什么问题,可以和我联系。

  在打开了数据库之后(尽管屏幕上什么也没有),我们可以进行第三步了。我们可以想一想,在打开了一个数据库之后,我们想要干什么呢?最简单的,当然是从中读取我们所要的数据。ASP访问数据库的方法是采用记录集来作为数据的容器。比如说我们执行了一条ASP查询语名,其必然将返回查询结果,如果此查询成功的话,其返回的查询结果必然包含了符合我们查询条件所有记录。在此,我们将此查询结果赋予一个变量,这个变量包含了我们查询语句返回的符合我们条件的也就是我们想要的记录(数据),我们就把这个变量叫做记录集。这个名称是很形象的。然后我们再读取这个变量,将一条条记录依次读取出来。至于如何读取记录集中的记录,我们以后再讨论。下面,我们写出这个记录集语句:

set objrs=objconn.execute("select name from mytab order by name")

  其中objrs就是我们刚才所提的那个变量,也就是记录集。objconn.execute的意义是通过objconn这个连接来执行一个数据库查询语句(“”)内的便是一个非常常见的SQL查询语名,它的意义是从mytab表中选择name这一列并以name这一列的数据为索引来排序。(请大家找一些SQL的资料,对其不要研究得太深,只要知道一些基本的数据库操作命令即可。如果没有,可以找我要。)之后,这个命令自然返回了name这一列的所有记录了,而这些记录,已经全部赋给了objrs这个变量。经过了这个语句,objrs的身份已经从一个普通变量变成了一个包含有我们所要的数据的一个“黄金”变量。当然,这只不过是我们的一种理解。实际上objrs此时已经是一个对象,它已经具备了许多的方法和属性。下面,我们便利用它的一此方法和属性来读取记录集中的记录。

  在进行之前,我们有必要粗略地了解一下数据集在objrs中的存储方式。如果我们刚才的命令是:

select name,id from mytab order by name

  则返回的数据包括两列,包括name和id这两列。那么如何从objrs中读取指定列中记录呢?可用下列语句:

objrs("列名")

  如果要读取我们上面命令中返回的name这一列,我们可以使用:objrs("name")。

下面,就让我们完整地把记录读出来吧!


while not objrs.eof
response.write objrs("name")
objrs.movenext
wend


  以上程序使用了objrs的eof属性和movenext方法。有过纺程经验的人对eof这个属性肯定非常熟悉,没错,它就是用来判断这个记录集的指针是否已到了记录集的末尾。


  且慢,让我们来慢慢分析。当我们执行set objrs=objconn.execute("select name from mytab order by name")这一命令之后,objrs变成了一个记录集,而这个记录集中必然要有一个指针,用来读取数据,如图所示:



  此时,这个指针指在第一个记录上。所以我们在循环的第一次调用objrs("name")时,所读出来的是这个记录集中name列的第一行数据。在读完了之后,这个指针并不会自动往下移,面需要我们人为地强制它往下移,这便是movenext这个方法的秒用了。objrs.movenext这个语句的作用正是在每次读完一行数据时使指针往下移一个记录。

现在,让我们来把我们今天学习的全部程序联起来。


set objconn=server.createobject("adodb.connection")
objconn.open "dsn=mydb;database=db2;uid=;pwd=;"
set objrs=objconn.execute("select name from mytab order by name")
while not objrs.eof
response.write objrs("name")&"
"
objrs.movenext
wend


  把它们插入到我们的ASP网页中,哇,我真的会使用数据库了呀!真是得谢谢sunwen了!哈哈!尽管我们已经把数据成功地读取了出来,但我们还要反数据输出格式化,这就得用一定的HTML功底了。通过一系列的HTML元素的运用,我们可以把数据格式定制地非常好看,甚至可以把他们化为表格的形式。如果需要这种程序范例的可以写信给我。

  差点忘了一个问题,是上一课遗留下来的。就是如果我们使用的是ISP的空间,我们将怎样打开数据库呢?很简单,我们只要不通DSN而直接打开就行了,方法如下:

只要把

  objconn.open "dsn=mydb;database=db2;uid=;pwd=;"

这一句替换成:

  objconn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & SERVER.MapPath("db2.mdb")

  想必大家一定看得懂其中的奥妙,我也要去吃饭了,再见!

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: