使用组件封装数据库操作(二)

前段日子发表的文章,数据库的连接代码可以直接在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()方法

<HEAD>
  
   
<!- 测试页 ->
<!- 功能:测试组件 ->
<!- 作者:龙卷风.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.ourfly.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这个软件的功能,我们一步一步实现。