打印本文 打印本文  关闭窗口 关闭窗口  
使用组件封装数据库操作
作者:龙卷风.NET  文章来源:csdn.net  点击数  更新时间:2006/4/22 22:42:26  文章录入:admin  责任编辑: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"

    strSql = strSql &",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()方法

<HEAD>

 

<!- 测试页 ->

<!- 功能:测试组件 ->

<!- 作者:龙卷风.NET at cidu.net->

 

<%

    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")   

%>

 

<TITLE>

   数据组件测试页

</TITLE>

 

<H1><CENTER>欢迎使用数据组件(www.ourfly.com)</CENTER></H1>

 

<%

       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 "<CENTER><TABLE BORDER=1 cellspacing=0 cellpadding=2>"

         Response.Write "<tr BGCOLOR=silver align=center>"

         Response.Write "<td>EmployeeID</TD>"

         Response.Write "<td>LastName</td>"

           Response.Write "<td>FirstName</td>"

               Response.Write "<td>Title</a></td>"

           Response.Write "<td>TitleOfCourtesy</a></td>"

           Response.Write "<td>BirthDate</td>"

           Response.Write "<td>HireDate</td>"

           Response.Write "<td>Address</td>"

           Response.Write "<td>City</td>"

         Response.Write "</tr>"

 

               Rs.AbsolutePage = Page

               For iPage = 1 To Rs.PageSize

                     Response.Write "<TR align=right>"

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

                          Response.Write "<td>"&Rs.fields.item(i)&"</td>"

                      next

                     Response.Write "</TR>"

                      Rs.MoveNext

                      If Rs.EOF Then Exit For

                next

      Response.Write "</TABLE></CENTER>"

%>

 

<Form name="myform" method="get">

<%If Page <> 1 Then%>

     <A HREF="<%=Myself%>?Page=1">第一页</A>

     <A HREF="<%=Myself%>?Page=<%=(Page-1)%>">上一页</A>

<%End If%>

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

  <A HREF="<%=Myself%>?Page=<%=(Page+1)%>">下一页</A>

  <A HREF="<%=Myself%>?Page=<%=Rs.PageCount%>">最后的一页</A>

<%End If%>

页次:<FONT COLOR="Red"><%=Page%>/<%=Rs.PageCount%></FONT>

</Form>

 

<%

Rs.close

%>

 

 

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

这个页面相对简单一些

<HEAD>

 

<!- 测试页 ->

<!- 功能:测试组件 ->

<!- 作者:龙卷风.NET ->

 

<%

    Dim DataQuery

       Dim strID

       Dim strResult

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

%>

 

<TITLE>

   数据组件测试页

</TITLE>

 

<H1><CENTER>欢迎使用数据组件(www.97531.com)</CENTER></H1>

 

<%

    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

%>

 

<FORM NAME="MyForm">

<INPUT TYPE=TEXTBOX NAME="EmpID" SIZE=40><P>

 

<INPUT LANGUAGE="VBScript"

       TYPE="BUTTON"

       VALUE="Search"

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

               + MyForm.EmpID.Value">

 

</FORM>

</HEAD>

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

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

真是……

 

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

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


 

打印本文 打印本文  关闭窗口 关闭窗口