对于用asp技术编程的初学者来说,无从下手是第一感觉,笔者曾经有这么一段经历。经过一番"磨难"以后,你就会找到灵感。现将本人编程中积累的一些经验,拟成本文,奉献给读者。
1 首先要学习一些例子程序。
接到任务后,不要盲目地急于编写代码,而是先看一下别人成功的例子,然后在其上修改或模仿调试,这样会加快你熟悉的速度。例如,关于asp编程的教科书上经常有这么一个例子出现,即显示系统当前时间的语句:<%=now()%> ,别看这么简单的一条语句,里边却包含了asp的编程思想和格式,会给你后边的工作带来很大的帮助。比如说,测试iis(internet information server)web server是否正常工作,用上边的一个语句测试就足够了。
2 在windows nt上安装odbc后,要测试和后台数据库确实连通后,再开始编程测试。
可能您没有看懂题目的意思,我在这里解释一下:比如说,后台数据库是oracle,那么在nt sever上首先要安装sql*net(或net 8),然后配置odbc,确定和oracle数据库连通,可以用sql*plus测试,还要选择和oracle数据库相同的字符集,这个工作要在注册表里完成。最后在odbc里边测试和oracle数据库连通后,说明web server 到后台数据库端的工作就完成了,下边再开始编程工作。反过来,你若先编程,后做odbc的工作,那么你无法调试程序是否正确,可能大大降低编程效率。在odbc配置中要选择microsoft odbc for oracle,不要选择oracle odbc driver,否则不能和数据库建立联系。
在asp程序中,和数据库连接的语句是比较固定的,举例如下:
set conn = server.createobject("adodb.connection")
conn.open "odbclink","o7people","peoplepd"
在这里,odbclink是数据源的名字,可以说成是odbc和数据库连接的定义,o7people是oracle的一个用户名,peoplepd是用户o7people的密码。
3 记录下出错信息,寻找纠错规律。
在编程、调试过程中,是一个出错、纠错的循环过程,但是时间长了,会发现一些规律,排除错误的效率会大大提高。
3.1 出错信息:
microsoft ole db provider for odbc drivers 错误 80040e14
[microsoft][odbc driver for oracle][oracle]ora-00933: sql command not properly ended
/default.asp, 行781
这种错误,一般是在执行 conn.execute("sql 语句")操作时,所定义的"sql 语句"有问题,检查此语句就能发现问题,如日期格式不对,等等。
zhezhong
3.2 出错信息:
adodb.field 错误 800a0bcd
bof 或 eof 中有一个是"真",或者当前的记录已被删除,但应用程序要求操作的是当前的记录。
/lzjsblr.asp, 行123
这个错误,一般发生在执行下列语句的过程中:
set rs = conn.execute("sql 语句" )
varnum1=rs(0)
rs.close
所取的值rs(0)无意义或无意义,还要检查"sql 语句"的正确性。
3.3 出错信息:
microsoft vbscript 编译器错误 错误 800a0409
未结束的字符串常量
/people/default.asp, 行86
insert_sql = insert_sql & dwdm & "," & d1 & "," & t1 & "," & t2 & ",
————————————————————————–^
次项错误也是出在sql语句的定义上,检查引号、单引号等的配对情况。
4 下边是一个基于浏览器的网上用户注册登记程序,笔者在里边运用了一些技巧,奉献给感兴趣的读者。
<html>
<head>
……
<
<%和数据库连接
set conn = server.createobject("adodb.connection")
conn.open "odbclink","o7people","peoplepd"
将选择的数据放入选择框
set rs = conn.execute("select dwmc from tab_dw order by dwdm")
%>
<% do while not rs.eof %> <option><% = rs(0) %></option>
<%
rs.movenext
loop
rs.close
%>
<%
定义变量
dim d1,d2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,csrq,sqrq
事件触发按钮
b1="commit"
b2="return"
%>
<%
将信息初始化
sub reset()
d1 = ""
……
t9 = date()
t10 = ""
end sub
%>
<%
call reset()
%>
<%
信息提交条件(触发条件)
if request("b1") = "commit" then save button
d1 = request("d1")
set dwdm_rs = conn.execute("select dwdm from table_dw where dwmc="&d1&" " )
dwdm=dwdm_rs(0)
dwdm_rs.close
d2 = request("d2")
……
日期数据转换成oracle识别的格式
csrq = day(t6) & "-" & month_array(month(t6)) & "-" & year(t6)
sqrq = day(t9) & "-" & month_array(month(t9)) & "-" & year(t9)
定义sql语句
sql_insert = "insert into peopleuser(dwdm,dwmc,sjks,tele,address,zipcode,xm,xb,csrq,peoplename,peoplepd,sqsj,bz) values ("
sql_insert = sql_insert & dwdm & "," & d1 & "," & t1 & "," & t2 & "," & t3 & "," & t4 & ","
sql_insert = sql_insert &t5&","& d2 & "," & csrq & "," & t7 & "," & t8 & "," & sqrq & ","
sql_insert = sql_insert & t10 & ")"
将信息入库
set lfmc_r4 = conn.execute(sql_insert)
信息提交完成后,将屏幕信息初始化
call reset()
end if
%>
