1 asp中对数据库的访问技术
asp(active server pages)是标准html的一种变体,asp网页在输送到客户端浏览器之前,先在服务器上执行,得到标准html代码,再输送到浏览器上显示出来,这意味着web开发者可以开发与服务器交互的网页,使网页能根据访问者提供的条件反馈最新的实时的信息。而这些技术的实现与数据库是分不开的,数据库是对外开放网站与企业内部管理系统间的数据交换中心。在asp网页中,对于数据库的操作是通过asp内置的ado(activex data object)对象结合sql语言来实现的。当然,ado对象也可以通过recordset对象来操作数据库,但总的来说在使用上不大方便。要使用sql语言来对数据库进行操作,首先必须建立一个数据库连接对象。下面的例子就是显示了生成一个connection对象cnndb对网页所在目录的数据库board.mdb进行引用。
set cnndb=server.createobject("adodb.connection")
strcon= "provider=microsoft.jet.oledb.4.0;data source=" & _
server.mappath("board.mdb")
cnndb.open strcon
打开数据库后,可以利用recordset对象的open方法执行sql语言的select语句。然后可以通过recordset对象对返回的记录集进行操作。
建立recordset(记录集)对象,可由下条语句完成:
set rstobj=server.createobject(“adodb.recordset”)
当利用sql语言对数据库中的数据进行编辑时,由于sql语法并不会传回记录集,所以不需要通过recordset对象变量引用该记录集,可以直接通过connection对象的execute方法执行sql命令。现在有关于sql语言用法的书籍和文章很多,若读者有兴趣可以查找相应的资料,在此本文就不再多介绍了。
2 一个asp的实例
为了说明在asp中如何利用sql语言来访问数据库以及如何处理不同数据类型间的转换问题,做如下实例。
首先用acess创建一个包含表customer的数据库board.mdb,表customer的包含5个字段:username(字符串)、sex(字符串)、age(数值型)、birthday(日期型)和email(字符串)。则我们可以建立asp代码board.asp如下:
<html>
<head>客户信息资料</head>
<body>
<%if isempty(request.form) then %>
<!--生成用户界面-->
<form method=post action=board.asp>
<p align=center><font size=6 face=楷体_gb2312><strong>客户信息资料</strong></font></p>
<p align=left>您的姓名: <input name=text1 ></p>
<p align=left>您的性别: <input name=radio1 value="男" type=radio checked>男 <input name=radio2 value="女" type=radio>女</p>
<p align=left>您的年龄: <input name=text2 ></p>
<p align=left>您的出生日期:<input name=text3 ></p>
<p align=left>您的e-mail:<input name=text4></p>
<p> <input name=submit1 type=submit value=提交></p>
</form>
<%else
<!--处理表单的提交结果-->
set cnndb = server.createobject("adodb.connection")
strcon = "provider=microsoft.jet.oledb.4.0;data source=" & _
server.mappath("board.mdb")
cnndb.open strcon
cnndb.excecute strsql
%>
<font size=6>谢谢您的留言!</font>
<%
cnndb.close
set cnndb=nothing
end if%>
</body>
</html>
在这里通过连接对象cnndb的excecute方法来完成sql语句的执行。sql语句通过字符串变量strsql作为参数传递给excecute,在这里就涉及到不同数据类型的转换的问题。为了说清楚这个问题,我们分为常量和变量两种情况。
3 常量参数的传递
假设我们要向数据库增加一条记录:张三,男,22,78/02/23,zs@163.net。则变量strsql="insert into board(username,sex,age,birthday,email) values(‘张三’,’男’,22,#78/02/23#)"。这里我们看到:字符串用单引号括起来,日期用#号括起来,而数值型不需要定界符。但是我们应该注意:
1) 日期型,年月日之间可以用“/”或“-”隔开,它们之间的顺序可以是:年月日、月日年和日月年三种。日期型的定界符可以用“#”或“’”。
2) 数值型常量也可以用定界符“’”括起来。
根据上面两个规则,下面这条赋值语句也是正确的。
strsql="insert into board(username,sex,age,birthday,email) values(‘张三’,’男’,’22’,’78-02-23’)"
4 变量的参数传递
(1)acess数据库中的字段是字符串,则有以下两种情况值得注意:
a.如果表单提交的数据也是字符串则较简单。如对字符串字段username,对应表单中的对象text1,而text1的返回值为字符串,则插入用户名可写成:
strsql="insert into board(username) values(‘" & request("text1") & "’)"
这里,变量返回的值必须用单引号括起来,表明是字符串。
b.如果表单提交的数据是数值型时,有两种写法。如对字符串字符型字段 sex,对应表单中的radio1对象,而radio1对象返回的是数值(男为0,女为1),下面两种写法均可:
strsql="insert into board(sex) values(‘" & request("radio1") & "’)"
strsql="insert into board(sex) values(" & request("radio1") & ")"
即:数值可以用“’”作为定界符,也可以没有定界符。
(2)acess数据库中的字段是数值型
如board表中的字段age的数据类型为数值型,而此时在表单中对应的text2对象的返回值为字符串,则:
正确写法:strsql="insert into board(age) values(" & request("text2") & ")"
错误写法:strsql="insert into board(age) values(‘" & request("text2") & "’)"
若将board表中的字段sex的数据类型改为数值型,对应的radio1对象的返回值也是数值型,则radio1的返回值可加单引号也可不加,下面两种写法均可:
strsql="insert into board(sex) values(‘" & request("radio1") & "’)"
strsql="insert into board(sex) values(" & request("radio1") & ")"
注:以上代码均在windows 2000下调试通过。
5 结论
以上通过实例说明了在asp中通过sql访问数据库的方法,然后主要介绍了字符型、数值型和日期型在使用sql中的类型转换的方法及注意事项。这些也是在写asp脚本时经常遇到的问题,值得引起注意。