| | | | | | | | | | | | | | |  
 
   收藏 |  网络安全 |  ASP技术 |  专业名词  |  资料下载 |  VB.NET技术 |  网络编程 |  网页设计 |  网站建设 |  c#.net技术 |  网络营销 |  网站推广 |
奇迹网络
技术园地
首页>>技术园地>>ASP技术>>使用组件封装数据库操作
使用组件封装数据库操作
来源:本站原创 时间:2007-9-4 20:24:59 编辑:admin
  其实,大家在书写asp程序时,最担心的可能就是数据库的连接信息,会被一些人看到,进行一些破坏。下面我们用vb6.0来做一个动态链接库(.dll)来隐藏数据库的连接信息。
  启动vb6.0,新建-->Active  dll工程。单击"工程"-->引用,选择"microsoft  active  server  pages  object  library"
和"microsoft  activeX  data  objects  2.1  library"两项。将类模块的名称改为dcss.将工程的名称改为yygwy.保存工程文件yygwy.vbp和类文件dcss.cls。
在dcss.cls中写入:
Private  myscriptingcontext  As  ScriptingContext
Private  myapplication  As  Application
Private  myrequest  As  Request
Private  myresponse  As  Response
Private  myserver  As  Server
Private  mysession  As  Session

Public  Sub  onstartpage(passedscriptingcontext  As  ScriptingContext)
Set  myscriptingcontext  =  passedscriptingcontext
Set  myapplication  =  myscriptingcontext.Application
Set  myrequest  =  myscriptingcontext.Request
Set  myresponse  =  myscriptingcontext.Response
Set  myserver  =  myscriptingcontext.Server
Set  mysession  =  myscriptingcontext.Session
End  Sub

Public  Sub  onendpage()
Set  myscriptingcontext  =  Nothing
Set  myapplication  =  Nothing
Set  myrequest  =  Nothing
Set  myresponse  =  Nothing
Set  myserver  =  Nothing
Set  mysession  =  Nothing
End  Sub

'以上语句是必须的。
'定义两个公有函数

Public  Function  datasource()  As  Variant
datasource  =  "driver={sql  server};server=yang;uid=sa;pwd=;  database=dcss"
End  Function

编译生成dcss.dll文件。注册regsvr32  路径\dcss.dll。
用visual  interdev打开global.asa文件.当然了,你也可以在其它文件中使用。
set    dcss=server.CreateObject("yygwy.dcss")  
oconn=dcss.datasource()          
application("strconn")=oconn  

在其它的页面中如下调用即可:
set  objConn  =  Server.CreateObject("ADODB.Connection")
objConn.Open  application("strconn")

前段日子发表的文章,数据库的连接代码可以直接在ASP文件中显示出来。这次又进行了一次封装。

打开vb,新建Activex控件,工程名称为WebDb,类模块名称为GetInfomation

引用”Microsoft Activex Data Object 2.6 Library ”

Private Conn As ADODB.Connection

Private Rs As ADODB.Recordset


‘作用:判断数据库是否正确连结

'自己可以更改连接串

Public Function GetConn()

Conn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Data Source=yang"

If Err.Number <> 0 Then

    GetConn = False

Else

    GetConn = True

End If

End Function


‘根据输入的雇员ID,得到雇员的名称

Public Function GetEmployeeName(strEmployeeID As Integer) As String

   

    Dim strSql As String

    Set rs = New ADODB.Recordset

    strSql = "select LastName+firstname from employees where EmployeeID=" & strEmployeeID

   

    rs.Open strSql, Conn, adOpenStatic, adLockOptimistic

   

    If rs.EOF Then

        GetEmployeeName = ""

    Else

        GetEmployeeName = rs.Fields(0)

    End If

   

    rs.Close

End Function

‘返回所有的雇员列表

Public Function GetEmployeeList() As ADODB.Recordset

 

    Dim strSql As String

    Set rs = New ADODB.Recordset

    strSql = "select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,BirthDate,HireDate,Address,City from employees"

    rs.CursorLocation = adUseClient

    rs.Open strSql, Conn, adOpenStatic

   

    Set GetEmployeeList = rs

    'rs.Close

End Function

 

我们进行测试

新建ASP页面,”TestWebDb1.asp”。主要用来测试GetEmployeeList()方法

 

 

<%

    Dim strTopic

    Dim strTitle

    Dim strContents

    Dim DataQuery

       Dim Rs

       Dim Myself

       Myself=Request.ServerVariables("script_name")

    Set DataQuery=Server.CreateObject("WebDb.GetInfomation")

       Set Rs=Server.CreateObject("adodb.recordset")   

%>

欢迎使用数据组件(www.domain.com)
>

<%

       Dim Flag

       Flag=DataQuery.GetConn()

       If Flag=false then

              ResPonse.Write "数据库没有连结,请检查"

              ResPonse.End

       End if

 

       Set Rs=DataQuery.GetEmployeeList()

       if rs.eof then

              Response.write "没有数据,请查询"

              Response.end

       end if

 

    Rs.PageSize =3

    Page= CLng(Request.QueryString ("Page"))

 

    If Page < 1 Then Page = 1

    If Page > Rs.PageCount Then Page = Rs.PageCount

 

         Response.Write "

"

         Response.Write "

"

         Response.Write "

"

         Response.Write "

"

           Response.Write "

"

               Response.Write "

"

           Response.Write "

"

           Response.Write "

"

           Response.Write "

"

           Response.Write "

"

           Response.Write "

"

         Response.Write "

"

 

               Rs.AbsolutePage = Page

               For iPage = 1 To Rs.PageSize

                     Response.Write "

"

                   for i=0 to Rs.fields.count-1

                          Response.Write "

"

                      next

                     Response.Write "

"

                      Rs.MoveNext

                      If Rs.EOF Then Exit For

                next

      Response.Write "

EmployeeID LastName FirstName Title TitleOfCourtesy BirthDate HireDate Address City
"&Rs.fields.item(i)&"
"

%>

 

<%If Page <> 1 Then%>

     第一页

     上一页

<%End If%>

  <%If Page <> Rs.PageCount Then%>

  下一页

  最后的一页

<%End If%>

页次:<%=Page%>/<%=Rs.PageCount%>

 

<%

Rs.close

%>

 

 

新建ASP页面,”TestWebDb2.asp”。主要用来测试GetEmployeeName()方法

这个页面相对简单一些

 

 

<%

    Dim DataQuery

       Dim strID

       Dim strResult

    Set DataQuery=Server.CreateObject("WebDb.GetInfomation")

%>

 

欢迎使用数据组件(www.domain.com)
>

<%

    If Len(Request.QueryString("ID")) > 0 Then

        strID = Request.QueryString("ID")

 

              Dim Flag

              Flag=DataQuery.GetConn()

              If Flag=false then

                     ResPonse.Write "数据库没有连结,请检查"

                     ResPonse.End

              End if

             

              strResult=DataQuery.GetEmployeeName(cint(strID))

              if strResult="" then

                     Response.Write "对不起,没有这个编号,请查询"

                     Response.End

              else

                     ResPonse.Write strResult

              end if

       End If

%>

 

       TYPE="BUTTON"

       VALUE="Search"

       ONCLICK="window.location.href = 'TestWebDb2.asp?ID=' _

               + MyForm.EmpID.Value">

 


一些想法:数据库连结如果放到组件里,如果要修改数据库连结,则要重新编译组件,可能会由此引发一些问题(但是推荐这种,毕竟数据库名和服务器名不会经常改)

如果数据库连结放到ASP页面,可以通过属性传值到组件中,但是安全性会降低。

真是……

好了,这篇文章结束了,希望对大家有帮助

今后的话题便是如何实现AspToDll这个软件的功能,我们一步一步实现。

 

 

 

 

 
   北京总部    太原分公司    English
北京网站建设 网站建设 北京网站制作 网站制作 北京网站建设 密云网站建设 网站建设 北京网站建设 北京网站制作 北京网站建设 上海网站建设 博网设计北京网站建设 上海网站建设 上海网站建设 深圳网站建设 网站制作

Copyright © 2007 Itqiji.com Inc. All rights reserved. 奇迹网络 版权所有

联系电话:010-80749631    010-82416384  
手   机:15001106568                                    
联系 QQ: 450338384奇迹网络     23287943奇迹网络 京ICP备05047545号
联系地址:海淀区上地信息路19号1号楼319                  
联系邮箱:qijiforever#yahoo.com.cn(把#换成@就可以了