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脚本时经常遇到的问题,值得引起注意。