关于ASP连接数据库和数据操作

        在ASP中,主要通过ADO(Active Data Objects)方式实现连接存取数据库。主要相关三种对象:Connection、Recordset 、Command和Fields。
        Connection:负责打开或连接数据。
        Recordset:负责存取数据表。
        Command:负责对数据库执行行动查询命令。
        Field 对象代表使用普通数据类型的数据的列。
        举例说明:
        共同
        Dim conn
        Dim rs
        Dim System_path
        Dim path    
        Set conn = Server.CreateObject("ADODB.Connection") 
        System_path  = "../"
        path = Server.MapPath(System_path & "mdb/kensaku.mdb") 
 
 
 
一、 ASP数据库连接          
        连接各数据库可以使用驱动程序,也可以使用数据源,使用驱动程序非常方便、简单,而使用数据源比较麻烦。 
        1. 连接Access
             conn.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=" & path
 
        2. 连接SQLSERVER
             conn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=;Initial Catalog=xuejie;Data Source=erpsv01 "                     
 
        3. 连接ORACLE
             conn.Open  "Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=shc;Password=shc;Data Source=hctg"
 
 
 
二、 ASP数据操作
        1. 六个实用小函数 
             (1). 关闭连接
             Public Sub DBDisConnect()
                    conn.close
                    set conn = nothing
             End Sub
 
             (2). 建立记录集
             Public Sub RSConnect(ByVal strSql)
                    set rs=Server.CreateObject("ADODB.Recordset")
                    rs.open sSqlStr,cnnPub,1,1
              End Sub
         
              (3).关闭记录集
              Public Sub RSDisConnect()
                   rs.close
                   set rs=nothing 
              End Sub
 
              (4).建立SQL文查询
              Public Sub SqlConnect(ByVal strSql)
                   DBConnect()
                   RSConnect(strSql)
              End Sub
 
              (5).关闭SQL文查询
              Public Sub SqlDisConnect()
                   RSDisConnect()
                   DBDisConnect()
              End Sub
 
             (6).建立SQL更新同时关闭
             Public Sub SqlExecute(ByVal strSql)
                   DBConnect()  
                   conn.Execute(strSql)
                   DBDisConnect()
             End Sub
         
        补充说明关于小函数2:
        rs.open sSqlStr,cnnPub,1,3中最后2个参数 CursorType,LockType
                     CursorType:
                     0(adOpenForwardOnly): 只能在Recordset的记录中向前移动,但速度最快。
                     1(dOpenKeyset):可以在Recordset中任意移动,其他用户所做的记录修改可见,但其他用户添加的记录不可见,删除的记录字段值不能被使用。 
                     2(adOpenDynamic):可以在Recordset中任意移动,其他用户增、删、改的记录都可见,但速度最慢。 
                     3(dOpenStatic):可以在Recordset中任意移动,其他用户增、删、改的记录都不可见。 
                     LockType:
                     0(adLockReadOnly):recordset的记录为只读
                     1(adLockPessimistic):只要保持Recordset为打开,别人就无法编辑该记录集中的记录. 
                     2(adLockOptimistic):当update recordset中的记录时,将记录加锁
                     3(adLockBatchOptimistic):以批模式时更新记录时加锁 
         注意如果发生RecordCount=-1问题主要是由于记录集游标是服务器游标引起的,解决方法是
可以追加设置rs.CursorLocation = 3或者保持rs.open sSqlStr,cnnPub,1,3(CursorType不能设置成2)的设置。
 
        2. Recordset 对象 
            Recordset 对象表示的是来自基本表或命令执行结果的记录全集。任何时候,Recordset 对象所指的当前记录均为集合内的单个记录。
             (1)BOF属性 指示当前记录位置位于 Recordset 对象的第一个记录之前,返回布尔型值。
                  if rs.bof then
             (2)EOF属性 指示当前记录位置位于 Recordset 对象的最后一个记录之后,返回布尔型值。           
                  if rs.eof then
             (3)MoveFirst | MoveLast | MoveNext | MovePrevious属性 
                  使用MoveFirst 方法将当前记录位置移动到 Recordset 中的第一个记录。
                  使用MoveLast 方法将当前记录位置移动到 Recordset 中的最后一个记录。Recordset 对象必须支持书签或向后光标移动;否则调用该方法将产生错误。
                  使用MoveNext 方法将当前记录向前移动一个记录(向 Recordset 的底部)。如果最后一个记录是当前记录并且调用 MoveNext 方法,则 ADO 将当前记录设置到 Recordset ( EOF 为 True)的尾记录之后。当 EOF 属性已经为 True 时试图向前移动将产生错误。
                   使用MovePrevious 方法将当前记录位置向后移动一个记录(向记录集的顶部)。Recordset 对象必须支持书签或向后游标移动;否则方法调用将产生错误。如果首记录是当前记录并且调用 MovePrevious 方法,则 ADO 将当前记录设置在 Recordset (BOF 为 True)的首记录之前。而 BOF 属性为 True 时向后移动将产生错误。如果 Recordset 对象不支持书签或向后游标移动,则 MovePrevious 方法将产生错误。
              例如:rs.movenext
              (4)AbsolutePage属性 识别当前记录所在的页码 
              例如:rs.absolutePage=1
              (5)AbsolutePosition 属性 可根据其在 Recordset 中的序号位置移动到记录,或确定当前记录的序号位置。提供者必须支持该属性的相应功能才能使用该属性。                      
              (6)Pagecount属性 确定 Recordset 对象中数据的页数。“页”是大小等于 pagesize 设置的记录组。 该值为 -1 以表明 PageCount 无法确定。
              例如:totalpages = rs.pagecount
              (7)Pagesize 属性 可确定组成逻辑数据页的记录数。
              例如:pagesize = 10
              (8)Recordcount 属性 可确定 Recordset 对象中记录的数目。
              例如:total = rs.recordcount
 
        3. 数据操作
            (1)不用游标
                 查询:
                 call SqlConnect(Sql) 
                 Do while not rs.eof
                     if cint(i) mod 2 = 0 then
                            <tr bgcolor="#F7F7E7">
                     else
                            <tr >
                     end if
                     <td align="center" height ="20" width="8%"><%=I%></td>
                    rs.movenext
                     i=i+1
                  loop
                  call SqlDisConnect
 
                 追加更新削除:
                 call SqlExecute (sql)
 
             (2)用游标                 
                  查询:
                  rs.cursorlocation = 2
                  rs.open sql,conn,1,3
                  Do while not rs.eof
                          redim Preserve s(i)
                          (i) = rs("xx")
                          i = i + 1
                         rs.movenext
                   loop
                   rs.close
    
                   追加:
                   sql = "select * from xxx where xx='' "(oracle,sqlserver)
                   sql = "select * from xxx where xx=-1"(Access)
                   rs.cursorlocation = 2
                   rs.open sql,conn,1,3
                   rs.addnew
                   rs("xxx") = xxx
                   rs.update
                   rs.close
 
                   更新:
                   sql = "select * from xxx where xx='" & xx & "'"
                   rs.cursorlocation = 2
                   rs.open sql,conn,1,3   
                   rs("xx") = 2
                   rs.update
                   rs.close
                  
                   削除:
                   sql="delete from xxxx where xx='"&xx&"'"
                   rs.cursorlocation=2
                   rs.open sql,conn,1,3 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值