【声明:转载此信息在于传递更多信息,其内容表达的观点并不代表本站立场,由这些信息所产生的一切后果本站不负任何责任。如果您对本信息有什么意见,欢迎和本站联系,谢谢!】http://CiDu.Net
其实,大家在书写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这个软件的功能,我们一步一步实现。
声明:以上信息资料大都是网上搜集而来,版权归作者,如有版权问题请留言告知我将马上改正。 文中所提到的各种观点只是原文观点,各种说法未经一一确认。并不代表本站认可此观点!!
|