(2)金沙js娱乐场官方网站利用ASP的ADO组件访问数据库,采用数据库来制作

利用SQL语句对数据库进行查询,(2)利用ASP的ADO组件访问数据库,使用ASP制作网站计数器,采用数据库来制作,2&gt,定义变量dim语句,iSql=”tb,在论坛看到很多帖子代码中都有一个共同的基本错误,新手asp编程的基本法则

一.前言 
本文用ASP技术实现文档资料管理技术主要有四个方面: 
(1)将公司的所有的文件资料按类分好录入数据库,本文采用的是Access数据库。 
(2)利用ASP的ADO组件访问数据库,利用SQL语句对数据库进行查询。 
(3)利用WEB页和IIS,将查询结果在用户的浏览器显示出来。 
(4)利用Javascript 实现下拉式菜单。 
二.具体实现 
1.数据库设计 
本文采用Access 数据库,按照公司的文件类型,分成10大类,每类分10小类,用10大类建
立10个相应的表。每个表的定义
如下:  
表名 字段1 字段2 字段3 字段4 字段5 字段6 字段7 
公司制度 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
合同档案 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
计划档案 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
客户档案 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
管理表格 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
产品档案 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
证件档案 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
声像档案 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
公司公告 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 
公共信息 文件编号 文件名 链接路径 文件归属部门 起草人 文件类型 生效日期 

‘调用chgimg函数(传入计数器值) 
toimg=chgimg(rs(“curvalue”)) 
toimg=”document.write(” & “‘” & toimg & “‘)” 

<6>几个简单的asp对象的讲解
response对象:服务器端向客户端发送的信息对象,包括直接发送信息给浏览器,重新定向URL,或设置cookie值
request对象:客户端向服务器提出的请求
session对象:作为一个全局变量,在整个站点都生效
server对象:提供对服务器上方法和属性的访问
(a) response对象的一般使用方法
比如:
<%
resposne.write(“hello, welcome to asp!”)
%>
在客户端浏览器就会看到 hello, welcome to asp! 这一段文字
<%
response.Redirect(“www.sohu.com”)
%>
如果执行这一段,则浏览器就会自动连接到 “搜狐” 的网址
关于response对象的用法还有很多,大家可以研究研究
request对象的一般使用方法
比如客户端向服务器提出的请求就是通过request对象来传递的
列如 :你在申请邮箱的所填写的个人信息就是通过该对象来将
你所填写的信息传递给服务器的
比如:这是一段表单的代码,这是提供给客户填写信息的,填写完了按
“提交”传递给request.asp文件处理后再存入服务器数据库
<form name=”form1″ method=”post” action=”request.asp”>
<p>
<input type=”text” name=”user”>
</p>
<p>
<input type=”text” name=”pass”>
</p>
<p>
<input type=”submit” name=”Submit” value=”提交”>
</p>
</form>
那么request.asp该如何将其中的信息读入,在写入数据库,在这里就要用到
request对象了,下面我们就来分析request.asp的写法
<%
dim name,password (定义user和password两个变量)
name=request.form(“user”) (将表单中的user信息传给变量name)
password=request.form(“pass”) (将表单中的pass信息传给变量password)
%>

%>

那么在读取字段的时候判断是否为空的:
<%
if isnull(rs(字段名))=true or rs(字段名)=”” then
    ‘true表示为空
else  
    ‘false表示不为空
end if

2.在WEB页内,用ASP编写脚本,来访问数据库。 
2.1 建立数据连接,其脚本如下: 
<% 
dim conn 
dim connstr 
on error resume next 
connstr=”DBQ=”+server.mappath(“文件目录.mdb”)+”;DefaultDir=;DRIVER={Microsoft 
Access Driver (*.mdb)};” 
set conn=server.createobject(“ADODB.CONNECTION”) 
conn.open connstr 
%> 
2.2 定义数据库的纪录集,编写SQL语句,脚本如下: 
<% 
dim rs ,sql, 
set rs=server.createobject(“ado.recordset”) 
sql=”SELECT 文件编号,文件名,链接路径,文件归属部门 FROM 表名 WHERE 条件” 
rs.open conn,sql,1,1 
%> 
2.3 建立一个WEB页,插入表单,脚本如下: 
<htm> 
<head> 
<title>网页的标题名</title> 
</head> 
<body> 
<form method=”POST” action=”search.asp”> 
<p> <font color=”#FF0000″>输入查询的字符串</font>:<input type=”text” 
name=”content” size=”17″></p> 
<p><br> 
<font color=”#FF0000″>查询文件类别:</font> 
<select size=”1″ name=”filetype”> 
<option>公司制度</option> 
<option>计划档案</option> 
<option>合同档案</option> 
<option>财务档案</option> 
<option>客户档案</option> 
<option>证件档案</option> 
<option>声像档案</option> 
<option>产品档案</option> 
<option>公司公告</option> 
<option>公共信息</option> 
</select></p> 
<p><br> 
</p> 
<p> <input type=”submit” value=”查询” name=”submit”> 
<input type=”reset” value=”全部重写” name=”reset”></p> 
</form> 
</body> 
</html> 
2.4 用javascript 实现下拉式菜单 
用Javascript 编写菜单条目代码,形成menu.js ,在网页中插入下面一行: 
<script src=”menu.js” language=”javascript1.2”></script> 
由于menu.js 代码比较长,这里就不写出来。 
三.小结 
本文列出的代码都经过测试,在我公司运行得很好,当然用户也可以根据自己的需要,充分
利用SQL语句,对数据库进行各种查询,更新,添加,限于篇幅在此不作详细讨论。

● 制作前的准备 
  由于要使用数据库来保存记数值与用户信息,所以必须先建立数据库(这里我们采用ACCESS格式),可以用Microsoft Access建立下面的数据库: 

二.ASP数据库简单*作教程
<1>.数据库连接(用来单独编制连接文件conn.asp)
<%
Set conn = Server.CreateObject(“ADODB.Connection”)
conn.Open “DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” &
Server.MapPath(“\bbs\db1\user.mdb”)
%>

index.asp:

<!–#include file=”conn.asp”–>
<%
act = Request.Querystring(“act”)
if act=”up” then
    uploading(file)
else
%>
<form name=”form1″ enctype=”multipart/form-data” method=”post”
action=”index.asp?act=up”>
<p>
<input type=”file” name=”file”>
<input type=”submit” name=”Submit” value=”上传”>
</p>
</form>
<%
view()
end if
%>
<%
Function f_Bin2Str(ByVal sBin)
Dim iI, iLen, iChr, iRe
iRe = “”
If Not IsNull(sBin) Then
iLen = LenB(sBin)
For iI = 1 To iLen
iChr = MidB(sBin, iI, 1)
If AscB(iChr) > 127 Then
iRe = iRe & Chr(AscW(MidB(sBin, iI + 1, 1) & iChr))
iI = iI + 1
Else
iRe = iRe & Chr(AscB(iChr))
End If
Next
End If
f_Bin2Str = iRe
End Function

function uploading(file)  ‘上传函数!
Response.Expires=0
set iRe=Server.CreateObject(“ADODB.Recordset”)
iSql=”tb_img”
iRe.Open iSql,conn,1,3
iLen=Request.TotalBytes
sBin=Request.BinaryRead(iLen)
iCrlf1 = ChrB(13) & ChrB(10)
iCrlf2 = iCrlf1 & iCrlf1
iLen = InStrB(1, sBin, iCrlf1) – 1
iSpc = LeftB(sBin, iLen)
sBin = MidB(sBin, iLen + 34)
iPos1 = InStrB(sBin, iCrlf2) – 1
While iPos1 > 0
iStr = f_Bin2Str(LeftB(sBin, iPos1))
iPos1 = iPos1 + 5
iPos2 = InStrB(iPos1, sBin, iSpc)

iPos3 = InStr(iStr, “; filename=”””) + 12
If iPos3 > 12 Then
iStr = Mid(iStr, iPos3)
iPos3 = InStr(iStr, Chr(13) & Chr(10) & “Content-Type: “) – 2
iFn = Left(iStr, iPos3)
If iFn <> “” Then
iRe.AddNew
ire(“path”)=left(iFn,instrrev(iFn,”\”))
iRe(“fname”) = mid(iFn,instrrev(iFn,”\”)+1)
iRe(“type”) = Mid(iStr, iPos3 + 18)
iRe(“img”).AppendChunk MidB(sBin, iPos1, iPos2 – iPos1)

iRe.Update

End If
End If

sBin = MidB(sBin, iPos2 + iLen + 34)
iPos1 = InStrB(sBin, iCrlf2) – 1
Wend
set iRe1=Nothing
view()
%>

<form name=”asdf”>
<input type=”text” name=”ice”>
</form>

<SCRIPT LANGUAGE=”VBScript”>
<!–
Set TheForm = Document.asdf
TheForm.ice.Value=”<%=left(iFn,instrrev(iFn,”\”))%>”
–>
</SCRIPT>
<%
end function’上传函数结束!
%>

<%
function view() ‘查看链接函数
sql=”select*from tb_img order by id desc”
set rs=Server.CreateObject(“ADODB.Recordset”)
rs.open sql,conn,1,3
i=1
do while not rs.eof
%>
i:<a href=view.asp?id=<%=rs(“id”)%>
target=”_blank”><%=rs(“fname”)%></a><br>
<%
rs.movenext
loop
rs.close
set rs=nothing
end function

   一:购买虚拟主机空间的,适合没有IIS控制权
1:发挥你的想象力 修改数据库文件名
这个是最基本的。我想现在也没有多少连数据库文件名都懒得改的人吧?
至于改成什么,你自己看着办,至少要保证文件名复杂,不可猜测性。当然这个时候你的数据库所在目录是不能开放目录浏览权限的!

<%’建立与数据库的连接 
Set conn = Server.CreateObject(“ADODB.Connection”) 
dbpath=server.MapPath(“count.mdb”)’取得数据库的实际路径 
conn.open “driver={Microsoft Access Driver (*.mdb)};dbq=”&DbPath 
set rs=server.CreateObject(“adodb.recordset”) 

2.while 条件
语句
wend

数据库:zj.mdb

i

三、双引号的应用
通常我们写超级连接这样 <a
href=”abc.asp?id=<%=rs(“id”)%>”>超级连接</a>
但要是把这个超级连接编译进asp里面呢
response.write “<a
href=””abc.asp?id=”&rs(“id”)&”””>超级连接</a>”   ‘(正确写法)
response.write “<a
href=’abc.asp?id=”&rs(“id”)&”‘>超级连接</a>”      
‘(正确写法)
response.write “<a
href=abc.asp?id=”&rs(“id”)&”>超级连接</a>”        ‘(正确写法)

user:[数据类型:文本,字段大小:255]保存用户名 

<4>删除一条记录
删除数据库记录主要用到rs.delete,rs.update
<!–#include file=conn.asp–>
(包含conn.asp用来打开bbs\db1\目录下的user.mdb数据库)
<%
dim name
name=”xx”
set rs=server.CreateObject(“adodb.recordset”) (建立recordset对象)
sqlstr=”select * from message”
—->(message为数据库中的一个数据表,即你要显示的数据所存放的数据表)
rs.open sqlstr,conn,1,3 —->(表示打开数据库的方式)
while not rs.eof
if rs.(“name”)=name then
rs.delete
rs.update
查询数据表中的name字段的值是否等于变量name的值”xx”,如果符合就执行删除,
else 否则继续查询,直到指针到末尾为止
rs.movenext
emd if
wend
rs.close
conn.close 这几句是用来关闭数据库
set rs=nothing
set conn=nothing
%>

<%
dim conn
dim connstr
on error resume next
connstr=”DBQ=”+server.mappath(“zj.mdb”)+”;DefaultDir=;DRIVER={Microsoft
Access Driver (*.mdb)};”
set conn=server.createobject(“ADODB.CONNECTION”)
conn.open connstr
Sub rsclose()
    rs.close()
set rs=nothing
End Sub
Sub connclose()
    conn.close()
set conn=nothing
End Sub
%>

‘单独调用指定分隔符位置的内容
dim dm(3)  ‘定义一个循环变量
for i=0 to 3
    dm(i)=split(dd,”|”)(i)
next

  同时需准备十个图片:0-9,放于目录”1″中,文件名为0.gif,1.gif……(用来图形化显示的计数值) 

**<1>基本框架

%>

统计总数量:recordcount
<%
Set rs=Server.CreateObject(“ADODB.Recordset”)
rs.open “select * from 表名 order by id desc”,conn,1,1  
   response.write rs.recordcount   ‘显示统计出来的总条数

‘先检查用户名是否存在 
sql=”select * from counttable where user='”&user&”‘” 
rs.Open sql,conn,1,3 
if not rs.EOF then 
Response.Write”<title>申请出错</title>” 
Response.Write”对不起,用户名已经存在!</title>” 

<2>显示数据库记录
原理:将数据库中的记录一一显示到客户端浏览器,依次读出数据库中的每一条记录
如果是从头到尾:用循环并判断指针是否到末 使用: not rs.eof
如果是从尾到头:用循环并判断指针是否到开始 使用:not rs.bof

view.asp

<%
requestID=Request.Querystring(“id”)
Response.Buffer=true
Response.Clear

iConcStr = “Provider=Microsoft.Jet.OLEDB.4.0;Persist Security
Info=False” & _
“;Data Source=” & server.mappath(“zj.mdb”)
set iRe=server.createobject(“adodb.recordset”)
iSql=”select*from tb_img where id=” & requestID
iRe.open iSql,iconcstr,1,3
do while not iRe.eof

Response.BinaryWrite iRe(“img”)
response.write”<br>”
iRe.movenext
loop

经常看到有新手来问如何接收传送的值
下面我来详细的说一下接收传送值的多种方式
获取传送值通常使用三种方式来获取
id=Request(“id”) ‘可以是post或get方式传送的值
id=Request.Form(“id”) ‘只能post方式传送的值
id=Request.Querystring(“id”) ‘只能get方式传送的值

‘请注意,在正式使用计数器时,图片的路径一定要使用实际路径 
g=g & “<img src=1/” & mid(s,i,1) & “.gif align=bottom>” 
next 
chgimg=g 
end function 

<5>关于数据库的查询
(a) 查询字段为字符型
<%
dim user,pass,qq,mail,message
user=request.Form(“user”)
pass=request.Form(“pass”)
qq=request.Form(“qq”)
mail=request.Form(“mail”)
message=request.Form(“message”)
if trim(user)&”x”=”x” or trim(pass)&”x”=”x” then
(检测user值和pass值是否为空,可以检测到空格)
response.write(“注册信息不能为空”)
else
set rs=server.CreateObject(“adodb.recordset”)
sqlstr=”select * from user where user=‘‘‘‘”&user&”‘‘‘‘”
(查询user数据表中的user字段其中user字段为字符型)
rs.open sqlstr,conn,1,3
if rs.eof then
rs.addnew
rs(“user”)=user
rs(“pass”)=pass
rs(“qq”)=qq
rs(“mail”)=mail
rs(“message”)=message
rs.update
rs.close
conn.close
set rs=nothing
set conn=nothing
response.write(“注册成功”)
end if
rs.close
conn.close
set rs=nothing
set conn=nothing
response.write(“注册重名”)
%>
(b)查询字段为数字型
<%
dim num
num=request.Form(“num”)
set rs=server.CreateObject(“adodb.recordset”)
sqlstr=”select * from message where id=”&num
(查询message数据表中id字段的值是否与num相等,其中id为数字型)
rs.open sqlstr,conn,1,3
if not rs.eof then
rs.delete
rs.update
rs.close
conn.close
set rs=nothing
set conn=nothing
response.write(“删除成功”)
end if
rs.close
conn.close
set rs=nothing
set conn=nothing
response.write(“删除失败”)
%>


‘如果不确定 dd 里有多少个分隔符,使用循环参数的时候 to
后面的数字就不能直接写了,需要统计分隔符的数量
for i=0 to UBound(split(dd,”|”))
    dm(i)=split(dd,”|”)(i)
next
%>

有下面字段: 

<2>定义变量dim语句

③SQL2005数据库本地连接
Set conn=Server.CreateObject(“ADODB.Connection”)
conn.open
“provider=SQLNCLI;server=(local);database=数据库名;uid=用户名;pwd=密码;”

  注:此文件不能带用其它html标志,否则将会出错! 

<%
语句
……
%>

今天来说说SQL数据库的连接方式:
①SQL2000数据库本地连接
Set conn=Server.CreateObject(“ADODB.Connection”)
conn.open
“provider=sqloledb;server=(local);database=数据库名;uid=用户名;pwd=密码;”

数据库名称为:count.mdb 

<3>增加数据库记录
增加数据库记录用到rs.addnew,rs.update两个函数
<!–#include file=conn.asp–>
(包含conn.asp用来打开bbs\db1\目录下的user.mdb数据库)
<%
set rs=server.CreateObject(“adodb.recordset”) (建立recordset对象)
sqlstr=”select * from message”
—->(message为数据库中的一个数据表,即你要显示的数据所存放的数据表)
rs.open sqlstr,conn,1,3 —->(表示打开数据库的方式)
rs.addnew 新增加一条记录
rs(“name”)=”xx” 将xx的值传给name字段
rs.update 刷新数据库
rs.close
conn.close 这几句是用来关闭数据库
set rs=nothing
set conn=nothing
%>

如果一个页面很有可能会post方式提交来的参数,也有可能以get方式传送的,那我们可以使用第一种接收方式
id=Request(“id”)
就行了,如果这个值只有一种方式传送的,那最好使用对应的接收方式,因为这样接收效率才会提高,也在安全上加了道门槛

‘定义chgimg函数,将计数值用图形表示 
function chgimg(curvalue) 
dim s,i,g 
s=cstr(curvalue) 
for i=1 to len(s) 

Set conn = Server.CreateObject(“ADODB.Connection”)
conn.Open = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &
Server.MapPath(“pldb/pldb.mdb”)

字符串截取的四个函数
一、如果只截取前几位,使用left
二、如果只截取后几位,使用right
三、如果只截取中间几位,使用mid
四、分隔符截取,使用split

‘请注意,在正式使用计数器时,调用的路径一定要使用实际路径 

<%
dim a,b
a=10
b=”ok!”
%>
注意:定义的变量可以是数值型,也可以是字符或者其他类型的

ASP添加新数据:
第一种添加方式代码:
<%
Set rs=Server.CreateObject(“ADODB.Recordset”)
rs.open “select * from
表名”,conn,1,3   ‘这里添加新数据就不需要排序了,1,3上面我们已经说了,是可对数据库操作的意思
rs.addnew      ‘开始新数据
rs(“字段1″)=”123456”   ‘将数据添加到字段1
rs(“字段2″)=”123456”   ‘同上
rs.update  ‘开始向数据库写入
rs.close  ‘关闭rs记录
set rs=nothing  ‘清除rs记录集
%>
这种添加方式适合ACCESS和SQL数据库的任何方式连接
下面这个添加语句只适合ACCESS的第②种连接方式,同时也适合SQL数据库任何方式连接
第二种添加方式代码:
<%
conn.execute “insert into 表名(字段1,字段2) values(‘123456′,’123456’)”
‘两个括号中要一一对应,多个内容添加用逗号隔开
%>
上面这段添加语句唯一不支持ACCESS第①种数据库连接方式
瞧,添加数据我们也学会了

● 用户申请表单制作 
  可以使用Microsoft FrontPage制作下面的计数器申请表单,文件名保存为:get.htm 

**传说中的1小时里ASP入门 能不能入门看个人修养了

新手asp编程的基本法则 [新手必看] 2009-6-17 更新

<form method=”POST” action=”getcl.asp”> 
<p>用 户 名<input type=”text” name=”user” size=”20″></p> 
<p>计数器值<input type=”text” name=”curvalue” size=”20″></p> 
<p>主页地址<input type=”text” name=”pageurl” size=”20″></p> 
<p><input type=”submit” value=”提交” name=”B1″><input type=”reset” value=”全部重写” name=”B2″></p> 
</form> 

  1. If 条件1 then
    语句1
    elseif 条件2 then
    语句2
    else
    语句3
    endif

四、split 截取分隔符前后的内容,得到 AB CD EF GH
<%
dd=”AB|CD|EF|GH”
response.write split(dd,”|”)(0)   ‘得到内容是 AB
response.write split(dd,”|”)(1)   ‘得到内容是 CD
response.write split(dd,”|”)(2)   ‘得到内容是 EF
response.write split(dd,”|”)(3)   ‘得到内容是 GH

‘计数值加1 
sql=”update counttable set curvalue=curvalue+1 where user='”&user&”‘” 
conn.Execute sql 
sql=”select curvalue from counttable where user='”&user&”‘” 
set rs=conn.Execute(sql) 

3.for count=1 to n step m
语句1
exit for
语句2
next

同样,李四、王五、赵六也能。但是郑七的部门编号是NULL,它在部门信息表中找不到匹配的项(因为部门信息表中不存在部门编号为NULL的部门),所以郑七不会被检索。  
同理,没有任何人员的部门编号为03,所以工程部的记录也不会被检索  

‘将用户信息加入数据库 
rs.AddNew 
rs(“user”)=user 
rs(“pageurl”)=pageurl 
rs(“curvalue”)=curvalue 
rs.Update 
rs.Close 
set rs=nothing 
conn.Close 
set conn=nothing 
%> 

(用来连接bbs\db1\目录下的user.mdb数据库)

ACCESS 数据库对应程序的应用:①直接连接数据库文件
conn.Open “DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=”&Server.MapPath(“database/yanhang.mdb”)
这样的数据库连接方式,添加语句:
set rs=server.createobject(“adodb.recordset”)   ‘(正确写法)
rs.open “select * from dndj”,conn,1,3
rs.addnew
rs(“bh”) = bh
rs(“bm”) = bm
rs(“xm”) = xm
rs(“xsq”) = xsq
rs.update
rs.close
set rs=nothing