第25卷第4期
V ol 125 N o 14长春师范学院学报(自然科学版)Journal of Changchun N ormal Un iv ersity (N atural Science )2006年8月Aug 2006
ASP 存取常用类型数据库的编程实现
夏方林1,马 宁1,李小良2
(1.唐山师范学院计算机系,河北唐山 063000;2.开滦电信公司,河北唐山 063018)
[摘 要]本文介绍了ASP 存取各种常用类型数据库的方法及函数编程,并给出了一个利用文中提供
的函数存取E xcel 型数据库的例子。
[关键词]ASP ;存取数据库;编程
[中图分类号]T P311   [文献标识码]A    [文章编号]1008-178X(2006)04-0052204
[收稿日期]2006-05-21
[作者简介]夏方林(),男,河北唐山人,唐山师范学院计算机系讲师,硕士研究生,从事微型计算机监控及应用、计算机应用教学与研究。
1 引言
浏览网页时,我们随处可见网上调查、聊天室、留言板等因特网功能模块,这些程序都是用ASP (Ac 2tive S erver Page )与数据库相结合的技术来实现的。在因特网和企业网上用的数据库多是S Q L S erver 数据库或mdb 数据库,但是在企业网中,诸如D BC 、Excel 、D BF 等各种版本的数据库已存在,这些数据库是由应用软件如财务处理软件、办公自动化管理系统等生成。为了实现数据共享,避免重复创建数据库,这就需要ASP 能直接存取这些类型的数据库。
2 ASP 中存取数据库的方法
在ASP 中,允许用户与数据库进行交互的组件称A DO (ActiveX D ata Object )组件,而在A DO 组件中使用最多的三个主要对象是C onnection 、C ommand 和Rec ordset ,其中C onnection 对象用于建创数据库和A D O 程序之间的连接;C ommand 对象负责对数据库提供请求,也就是传递指定的SQ L 命令;Rec ordset 对象负责浏览与操作(包括增加、修改、删除)从数据库中取得的数据,即RecordSet 对象可以用来表示来自基本表或命令执行结果的记录全集。当然,仅凭这三个对象是无法完成对数据库的存取操作,还必须具有存取数据库的O D BC 或O LE D B 驱动程序。对于任何一种数据库都必须有相对应
的O DBC 和O LE DB 驱动程序,AD O 对象只有与各种数据库的驱动程序相结合,才能实现对数据库的存取。不同的数据库的驱动程序不同,可通过以下的方法来查看计算机上已安装的数据库驱动程序:在Wind ows 操作系统中打开“控制面板”中“O D BC 数据源(32位)”(或“控制面板”中“管理工具”中的“数据源(OD BC)”)中的“驱动程序”标签页来查看,大致有如下表所列的驱动程序:
驱动程序
适用数据库类型Micros oft Access Driver
A ccess Micros oft dBase Driver
D BF Micros oft Excel Drive
Excel Micros oft.Jet.O LED B.410
M DB Micros oft Visual F oxPr o Driver
D BC S Q LO L
E DB.1
SQ L S erver7.0
3 存取各种常用类型数据库的函数程序清单
C onnection 对象连接不同数据库的方法不一样,而一旦建立了连接,利用Recordset 对象存取数据库的方法基本相同。下面给出用V BS cript 脚本语言编写的创建和释放各种常用类型数据库连接对象的函数程序清
1972-
单。为了简便先给出函数中要用到的两个符号常量定义如下:
const adO penD ynam ic =2’使用动态类型游标,可以在记录集中向前或向后移动,对于其他用户造成的任何记录的变化都将在记录集中有所反映。
const adLockPessimistic =2’保守式锁定(逐个),指定在编辑一个记录时立即锁定它。
311 创建存取D BF 类型的数据库对象的函数程序清单
由于D BF 文件只相当于标准数据库文件中的一个数据表,不是一个标准的数据库文件,因此为了使用D
BF 文件,采用把所有的DBF 文件放在一个目录下,这样把目录名看成标准数据库中的库文件名,每一个D BF 文件相当于标准数据库的数据表。函数中的参数directory 指定DBF 文件所在的目录名,sql 指定D BF 文件名或SQ L 语句。
Function openD BF DB (directory ,sql )
  ’创建C onnection 对象实例objC onn
  Set objC onn =S erver.CreateObject (“A DO D B.C onnection ”
)  myDS N =“Driver ={Microsoft V isual F oxPr o Driver};”
  myDS N =myDS N &“S ourceType =D BF ;”
  myDS N =myDS N &“S ourceDB =”&Server.Ma pPath (directory)
  objC onn.Open myDS N ’调用O pen 方法打开与数据库的连接
  ’创建Recordset 对象实例objRS
  Set objRS =Server.CreateObject (“AD O DB.Rec ordset ”)
  ’打开D BF 文件,参数3指定游标为动态类型,参数4指定锁定方式为保守式
  objRS.O pen sql ,objC onn ,adO penDynamic ,ad LockP essimistic
End Function
312 创建存取Excel 类型的数据库对象的函数程序清单
将Excel 生成的X LS 文件看成一个数据库,其中的每一个工作表看成数据库表。因Excel OD BC 驱动程序无法直接用工作表名来打开工作表,所以要操作的Excel 工作表名必须写成“[工作表名$]”形式。函数中的参数w orkbook 指定Excel 生成的X LS 文件名,sql 指定Excel 工作表名或S Q L 语句。
Function openExcelD B (w orkbook ,sql )
  Set objC onn =S erver.CreateObject (“A DO D B.C onnection ”
)  myDS N =“Driver ={Microsoft Excel Driver (3.xls )};”
  myDS N =myDS N &“ReadOnly =0;”’0以读写方式打开Excel 工作表,1以只读方式打开
  myDS N =myDS N &“D BQ =”&Server.MapPath (w orkbook)
  objC onn.Open myDS N
  Set objRS =Server.CreateObject (“AD O DB.Rec ordset ”
)  objRS.O pen sql ,objC onn ,adO penDynamic ,ad LockP essimistic
End Function
313 创建存取M D B 类型的数据库对象的函数程序清单
M DB 数据库是一个完整的数据库,内部可含有若干个数据表。函数中的参数database 指定M DB 数据库文件名,参数sql 指定MD B 数据表名或S Q L 语句。
asp数据Function openM DBD B (database ,sql )
  Set objC onn =S erver.Create object (“A DO D B.C onnection ”
)  myDS N =“Pr ovider =Micr os oft.Jet.O LE DB.410;”
  myDS N =myDS N &“D ata S ource =”&S erver.MapPat h (database)
  objC onn.Open myDS N
  S jRS =S O j (“DO D B R ”)
  jRS O q ,j ,O Dy ,L et ob erver.Create b ect A .ecordset ob .pen s l ob C onn ad pen namic ad ockP essimistic
End Function
314 创建存取带密码的M D B 类型的数据库对象的函数程序清单
创建带密码和不带密码的M DB 数据库的Recordset 对象的方法类似,只是多了一个密码参数,即在与数据库连接时,必须给出密码信息。函数中的参数database 指定MD B 数据库文件名,sql 指定M D B 数据表名或SQ L 语句,passw ord 指定数据库的密码。
Function openSecuredMD BDB (database ,sql ,passw ord )
  Set objC onn =S erver.Create object (“A DO D B.C onnection ”
)  myDS N =“Pr ovider =Micr os oft.Jet.O LE DB.410;”
  myDS N =myDS N &“D ata S ource =”&Server.MapPath (database )
  myDS N =myDS N &“;Jet O LE DB :D atabase Passw ord =”&passw ord
  objC onn.Open myDS N
  Set ObjRS =Server.CreateObject (“AD OD B.Rec ordset ”
)  objRS.O pen sql ,objC onn ,adO penDynamic ,ad LockP essimistic
End Function
315 创建存取D BC 类型的数据库对象的函数程序清单
因F oxpr o 生成的D BC 数据库与M DB 数据库相似,都是一个数据库包含几个数据表的形式,故对D BC 数据库的存取方法与MD B 数据库相似。函数中的参数database 指定D BC 数据库文件名,sql 指定D BC 数据表名或S Q L 语句。
Function openD BC D B (database ,sql )
  Set objC onn =S erver.CreateObject (“A DO D B.C onnection ”
)  myDS N =“Driver ={Microsoft V isual F oxPr o Driver};”
  myDS N =myDS N &“S ourceType =D BC ;”
  myDS N =myDS N &“S ourceDB =”&Server.Ma pPath (database )
  objC onn.Open myDS N
  Set objRS =Server.CreateObject (“AD O DB.Rec ordset ”
)  objRS.O pen sql ,objC onn ,adO penDynamic ,ad LockP essimistic
End Function
316 创建存取S Q L S erver 类型的数据库对象的函数程序清单
SQ L S erver 属于Server 级的数据库,使用时要求比较严格,必须要求输入用户名及密码才能使用。函数中的参数ServerN am e 指定SQ L 服务器名,userI D 指定用户登录名,passw ord 指定用户登录密码,database 指定SQ L S erver 数据库名称,sql 指定SQ L Server 数据表或SQ L 语句。
Function openSQ LDB (S erver Name ,userI D ,passw ord ,database ,sql )
  Set objC onn =S erver.CreateObject (“A DO D B.C onnection ”
)  myDS N =“Pr ovider =S Q LO LED B.1;”
  myDS N =myDS N &“Data S ource =”&S erver Name
  myDS N =myDS N &“;User I D (或UI D )=”userI D
  myDS N =myDS N &“;passw ord (或PW D )=”&passw ord
  myDS N =myDS N &“;I nitial Catalog (或D ataBase )=”&database
  ObjC onn open myDS N
  Set objRS =Server.CreateObject (“AD O DB.Rec ordset ”)
  objRS.O pen sql ,objC onn ,adO penDynamic ,ad LockP essimistic
End Function
31 释放存取数据库对象的函数程序清单
由于创建D O 对象与数据库连接需要占用一定的系统资源,因此在对数据库进行存取操作完成后,应7A
及时释放AD O 对象本身和释放与数据库连接有关的系统资源。
function closedb ()
 if isobject (conn )then
  if not (c onn is nothing )then
   rs.close          ’关闭与数据库连接所需的系统资源
   set rs
nothing
’释放Rec ordset 对象实例   c onn.close
’关闭与数据库的连接   set conn
nothing
’释放C onnection 对象实例  end if
 end if
end function
把以上符号常量的定义及各个函数放在<%和%>内,以“D B.I NC “为文件名进行保存,并在需要的程序中使用include 命令包含进去,就可使用这些函数打开数据库,然后利用AD O 的Recordset 对象对数据库进行操作。但经实际使用发现,D BF 、D BC 、E xcel 数据库的执行效率没有MD B 数据库效率高。另外E xcel 数据库只能读取、增加、修改记录,但不能删除记录;D BF 、DBC 可以读取、增加、删除、修改记录,但是在增加记录时,任何一个字段值都不能为空,因此最好尽可能地使用M DB 或SQ L 数据库。
4 应用实例
本文给出一个存取Excel 数据表的例子来进一步说明这些函数的用法,其它函数的存取方法与此类似。假设有一个名为“房租管理.xls ”的Excel 文件,含有一个名为“房屋租赁”工作表,其字段名如下面的SQ L 语句。下面是编写的名为Excel.asp 的ASP 文件,用它调用openExcelD B 函数向“房屋租赁”工作表写入一条记录。
<!--
#include file =DB.inc -->
<%
sql =“i nsert into [房屋租赁$](起租日期,楼层系数,住房面积,租用期限)”
sql =sql &“values (’05Π3Π24’,112,120,5)”
call Excel (“房租管理.xls ”,sql )
call CloseD B ()
%>
[参考文献]
[1]汪晓平,钟军.ASP 网络开发技术[M].人民邮电出版社.
[2]魏善沛.W eb 数据库技术实用教程[M].清华大学出版社.
[3]吴明辉,胡煜,窦亮.ASP 数据库系统开发实例导航[M].人民邮电出版社出版.
[4]http :ΠΠart.21e[Z].The Progra mming Realization o f the ASP Access es Da taba se in Common U se
XI A Fang -li n 1,MA N i ng 1,LI X iao -liang
2(1.C om puter Department ,Tangshan Teacher ’s C ollege ,Tangshan 063000,China ;
2.T elcom of K ailuan C oal G r oup ,K ailuan 063018,China)
Abstract :This paper intr oduced the m ethod h ow the ASP accesses the various databases in comm on use ,and give an exam 2f x K y S ;D ;ple that the unction pr ovided in the pa per accesses the E cel database.
e w or ds :A P Access atabase Pr ogramm i ng