新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → [转帖]利用ASP存取各种常用类型数据库 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3587 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [转帖]利用ASP存取各种常用类型数据库 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     愚者 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:愚者
      等级:计算机学士学位
      文章:259
      积分:2375
      门派:XML.ORG.CN
      注册:2004/10/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给愚者发送一个短消息 把愚者加入好友 查看愚者的个人资料 搜索愚者在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看愚者的博客楼主
    发贴心情 [转帖]利用ASP存取各种常用类型数据库

    出处:PConline
    责任编辑:pjl
    作者:张伟
    ------------------------------------------------------------------
    摘要:

      本文讨论利用ASP存取DBF、DBC、MDB、Excel、SQL Server型数据的方法及函数实现,最后给出一个利用本文提供的函数存取Excel型数据库的例子,对企事业数据重用及共享具有很强的实际意义。

    关键词:

      ASP数据库存取 DBF DBC MDB Excel SQL Server

    前言

      在Internet/Intranet网页上随处可见留言板、讨论组、网上投票、网上调查、聊天室等Internet功能模块,这些程序都是利用ASP(Active Server Page)与数据库技术结合而实现的。在Internet/Intranet上用的数据库大都是mdb数据库或SQL<数据库,但是在企事业Intranet<网中,各种版本的数据库已存在如DBF<、DBC、Excel、文本数据库,这些数据库是由应用软件如办公自动化系统、财务软件等所生成,如果ASP能直接利用这些类型数据库,就不需要重新建立数据库,进一步实现企业数据共享,究竟这些数据库能不能直接被ASP使用,笔者经过长期探讨总结出给出肯定的答案。

    一、ASP的对象存取数据库方法

      在ASP中,用来存取数据库的对象统称ADO(Active Data Objects),主要含有三种对象:Connection、Recordset 、Command,其中Connection负责打开或连接数据库,Recordset负责存取数据表,Command负责对数据库执行行动查询(Action Query)命令和执行SQL Server的Stored Procedure。

    二、连接数据库和打开数据表

      不同的数据库连接方法不一样(即建立Connection的实例方法不一样),一旦建立Connection实例完毕,利用Recordset对象进行存取数取数据的方法大同小异。

    三、程序清单

    四、实例(存取Excel数据表)

      为了更进一步说明这些函数的用法,本文给出一个存取Excel数据表的例子,其它函数的存取方法与此类似。
    -------------------------------------------------------------
    一、ASP的对象存取数据库方法

      在ASP中,用来存取数据库的对象统称ADO(Active Data Objects),主要含有三种对象:Connection、Recordset 、Command,其中Connection负责打开或连接数据库,Recordset负责存取数据表,Command负责对数据库执行行动查询(Action Query)命令和执行SQL Server的Stored Procedure。只依靠这三个对象还是无法存取数据库的,还必须具有数据库存取的驱动程序:OLE DB驱动程序和ODBC驱动程序。对于任何一种数据库都必须有相对应的OLE DB驱动程序和ODBC驱动程序,ADO<才能对数据库进行存取。存取过程可用下图描述:
    按此在新窗口浏览图片
    由上图可知,ADO对象必须与各种驱动程序结合才能存取各种类型数据库,不同的数据库需要不同的驱动程序。究竟机器上已安装哪些驱动程序呢?可通过如下的方法来验证:Windows9X或NT的“开始”→“设置”→“控制面板”→“ODBC Data Source(32Bit)”中的“驱动程序”标签页查证我们的机器上究竟装了哪些驱动程序。大致有如下表所列的驱动程序:

    <驱动程序                                             <适用数据库类型

    Microsoft.Jet.OLEDB.4.0                           Mdb

    Microsoft Access Driver                             Access

    Microsoft dBase Driver                              Dbase

    Microsoft Excel Driver                               Excel

    Microsoft Visual FoxPro Driver                     Dbc

    SQLOLEDB.1                                            SQL Server7.0
    --------------------------------------------------------------------------------
    二、连接数据库和打开数据表

      不同的数据库连接方法不一样(即建立Connection的实例方法不一样),一旦建立Connection实例完毕,利用Recordset对象进行存取数取数据的方法大同小异,下面对于不同的数据类型,编写了相对应的连接函数,其原型如下:

      1)Function CreatMdbRecordset( 数据库文件名, 数据表文件名或Select语句 );建立Mdb类型的数据库对象

      2)Function CreateSecuredMdbRecordset( 数据库文件名,数据表文件名或Select语句, 密码 );建立带密码的MDB类型的数据库对象;

      3)Function CreateDbfRecordset(目录名, DBF文件名或Select语句);建立DBF类型的数据库对象;

      4)Function CreateDbcRecordset(DBC数据库文件名, 数据表名或Select语句);建立DBC类型的数据库对象;

      5)Function CreateExcelRecordset(XLS文件名,Sheet名);建立Excel类型的数据库对象;

      6)Function CreateSQLServerRecordset(计算机名称,用户ID, 用户密码,数据库名称 数据表或查看表或Select指令 );建立SQL Server 类型的数据库对象;
    ----------------------------------------------------------------------------------------
    三、程序清单

    '以下程序用VBScript编写

    1)建立MdbRecordset对象,Mdb数据库是一个完整的数据库,内部可能含有若干个数据表,在此函数中,Connection的作用是连接数据库,Recordset的作用是打开数据表。

    Function CreateMdbRecordset(数据库文件名, 数据表名或Select语句 )

    Dim conn,Provider,DBPath

    ' 建立Connection 对象
    Set conn = Server.CreateObject("ADODB.Connection")
    Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
    DBPath = "Data Source=" & Server.MapPath( "数据库文件名" )
    '打开数据库
    conn.Open Provider & DBPath

    Set CreateMdbRecordset = Server.CreateObject("ADODB.Recordset")
    ' 打开数据表,参数二为Connection对象
    CreateMdbRecordset.Open "数据表名", conn, 2, 2

    End Function

    2)建立带密码的Mdb数据库的Recordset对象,它的建立方式与建立不带密码的Mdb数据库的Recordset对象类似,只是多了一个密码参数,即在与数据库连接时,必须给出密码信息。

    Function CreateSecuredMdbRecordset( 数据库文件名, 数据表名或Select语句,password )

    Dim conn,Provider,DBPath

    ' 建立Connection 对象
    Set conn = Server.CreateObject("ADODB.Connection")
    Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
    DBPath = "Data Source=" & Server.MapPath( "数据库文件名" )
    ' 连接数据库,注意下面一行带有密码参数
    conn.Open Provider & DBPath&”Jet OLEDB:Database Password=”&assword
    Set CreateSecuredMdbRecordset = Server.CreateObject("ADODB.Recordset")
    ' 打开数据表,参数二为Connection对象
    CreateSecuredMdbRecordset.Open "数据表名", conn, 2, 2

    End Function

    3)DBF文件不是一个标准的数据库文件,只相当于标准数据库文件中的一个数据表,所以为了使用DBF文件,采用把所有的DBF文件放在一个目录下,这样把目录名看成标准数据中的数据库表,每一个DBF文件相当于标准数据库的数据表。下面函数中Directory是DBF所在的目录名,

    Function CreateDbfRecordset( 目录名, DBF文件名或Select语句 )

    Dim conn,Driver,SourceType,DBPath

    ' 建立Connection 对象
    Set conn = Server.CreateObject("ADODB.Connection")
    Driver = "Driver={Microsoft Visual FoxPro Driver};"
    SourceType = "SourceType=DBF;"
    DBPath = "SourceDB=" & Server.MapPath( "目录名" )

    ' 调用Open 方法打开数据库
    conn.Open Driver & SourceType & DBPath

    Set CreateDbfRecordset = Server.CreateObject("ADODB.Recordset")
    ' 打开DBF文件,参数二为Connection对象
    CreateDbfRecordset.Open DBF文件名或Select语句, conn, 2, 2

    End Function
    )由Foxpro生成的DBC数据库与MDB数据库相似,都是一个数据库包含几个数据表的形式,所以对DBC数据库的存取方法与MDB数据库相似。

    Function CreateDbcRecordset( DBC数据库文件名, 数据表名或Select语句 )

    Dim conn,Driver,SourceType,DBPath

    ' 建立Connection 对象
    Set conn = Server.CreateObject("ADODB.Connection")
    Driver = "Driver={Microsoft Visual FoxPro Driver};"
    SourceType = "SourceType=DBC;"
    DBPath = "SourceDB=" & Server.MapPath( "DBC数据库文件名" )
    ' 连接数据库
    conn.Open Driver & SourceType & DBPath
    Set CreateDbcRecordset = Server.CreateObject("ADODB.Recordset")
    ' 打开数据表,参数二为Connection对象
    CreateDbcRecordset.Open "数据表名或Select语句", conn, 2, 2

    End Function

    5)将Excel97或Excel2000生成的XLS文件(book)看成一个数据库,其中的每一个工作表(sheet)看成数据库表。

    Function CreateExcelRecordset( XLS文件名,Sheet名 )

    Dim conn.Driver,DBPath

    ' 建立Connection对象
    Set conn = Server.CreateObject("ADODB.Connection")
    Driver = "Driver={Microsoft Excel Driver (*.xls)};"
    DBPath = "DBQ=" & Server.MapPath( "XLS文件名" )

    ' 调用Open 方法打开数据库
    conn.Open Driver & DBPath
    Set CreateExcelRecordset = Server.CreateObject("ADODB.Recordset")
    ' 打开Sheet,参数二为Connection对象,因为Excel ODBC驱动程序无法直接用'sheet名来打开sheet,所以请注意以下的select语句
    CreateExcelRecordset.Open "Select * From ["&sheet&”$]”, conn, 2, 2

    End Function

    6)SQL Server属于Server级的数据库,使用时要求比较严格,必须要求输入用户名及密码才能使用。

      Function CreateSQLServerRecordset(计算机名称,用户ID, 用户密码,数据库名称 数据表或查看表或Select指令 )

    Dim Params, conn

    Set CreatSQLServerConnection = Nothing

    Set conn = Server.CreateObject("ADODB.Connection")

    Params = "Provider=SQLOLEDB.1"

    Params = Params & ";Data Source=" & Computer

    Params = Params & ";User ID=" & UserID

    Params = Params & ";Password=" & Password

    Params = Params & ".Initial Catalog="&数据库名称

    Conn open Paras

    Set CreateSQLServerRecordset = Server.CreateObject("ADODB.Recordset")

    CreateSQLServerRecordset.Open source, conn, 2, 2

    End Function

      利用上面的函数就可以打开常用类型的数据库,然后利用ADO的Recordset对象的增加记录、删除记录、修改记录等功能就可以对数据库进行操作。但是要说明的是,在实际开发中我们发现,如果使用DBF、DBC、Excel数据库,执行效率没有MDB数据库效率高,最好尽可能用MDB类型数据库。

      如果用用DBF、DBC、Excel数据库,下面几点要注意:Excel数据库只能读取、增加记录、修改记录,但不能删除记录;DBF、DBC<可以读取记录、增加记录、删除记录、修改记录,但是在增加记录时,任何一个字段值都不能为空,由此可看出局限性很大,所以尽可能地用MDB或SQL数据库。
    ------------------------------------------------------------------------------------
    四、实例(存取Excel数据表)

      为了更进一步说明这些函数的用法,本文给出一个存取Excel数据表的例子,其它函数的存取方法与此类似。假设有一个如图2的名为1.xls的Excel文件, 含有三个工作表一班、二班、三班。下面得用上面的函数存取工作表“一班”的数据。
    按此在新窗口浏览图片
    图2

    编写ASP文件(文件名为1.asp)存取此Excel中文件。

    1.asp源代码

    ASP文件 <%

    ' 建立Connection对象

    Function CreateExcelRecordset(xlsfile,sheet)

    Dim rs,conn,Driver,DBPath

    Set conn = Server.CreateObject("ADODB.Connection")

    Driver = "Driver={Microsoft Excel Driver (*.xls)};"

    DBPath = "DBQ=" & Server.MapPath( "xlsfile" )

    ' 调用Open 方法连接数据库

    conn.Open Driver & DBPath

    set CreateExcelRecordset = Server.CreateObject("ADODB.Recordset")

    ' 打开Sheet表,参数二'>Connection对象

    CreateExcelRecordset.Open "Select * From ["&sheet&"$]",conn, 2, 2

    End Function

    %>

    <HTML>

    <BODY bgcolor="#FFFFFF">

    <TABLE BORDER=1>

    <TR BGCOLOR=#00FFFF>

    <%

    '本行是关键行,对函数的引用

    ' set rs=CreateExcelRecordset("1.xls","一班")

    Part I输出“表头名称”且表头的背景的颜色为#00FFFF

    ' For i=0 to rs.Fields.Count-1

    Response.Write "<TD>" & rs(i).Name & "</TD>"

    Next

    %>

    </TR>

    <%

    ' Part '>输出数据表的“内容”

    rs.MoveFirst ' 将目前的数据记录移到第一项

    While Not rs.EOF ' 判断是否过了最后一项

    Row = "<TR>"

    For i=0 to rs.Fields.Count-1

    Row = Row & "<TD>" & rs(i) & "</TD>"

    Next

    Response.Write Row & "</TR>"

    rs.MoveNext ' 移到下一项

    Wend

    %>

    </TABLE></CENTER>

    </BODY>

    </HTML>

    利用IE和PWS(Personal Web Server)后浏览结果如图3:
    按此在新窗口浏览图片
    图3

    参考文献:

    [1]DataBase and the World Wide Web Marianne Winslett, University of Illinois

    [2]http://www.aspobjects.com


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    http://photo.cnitv.com/PicLib/Pictures/Pi_21377.gif
    人生的意义不在马到成功,而在于不断求索,奋力求成。每一件有意义的事都需要不得我们以坚强的信念去完成,这样,我们的生活才会更加充实,意志更加坚强。
    人与人之间虽然相隔很近,但是心却离得很远!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/28 18:54:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/12/27 17:54:36

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    58.594ms