ASP快速开发方法之数据操作

2018-09-06 13:05

阅读:393

  

  这是我自己的心得,给大家作个参考。
我的目的是让开发变得简单,尽可能少地考虑实现语句,更多地把精力用于思考业务逻辑。希望我的文章对大家有所启发和帮助。

  好吧,让我们进入正题:

  先看以下例子:

  <%
db_path = database/cnbruce.mdb
connstr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Server.MapPath(db_path)
conn.Open connstr
Set rs = Server.CreateObject (ADODB.Recordset)
sql = Select * from cnarticle
rs.Open sql,conn,1,1
if rs.EOF and rs.BOF then
response.write (暂时还没有文章)
else
Do Until rs.EOF
response.write(文章标题是: rs(cn_title))
response.write(<br>文章作者是: rs(cn_author))
response.write(<br>文章加入时间是: rs(cn_time))
response.write(<br>文章内容是: rs(cn_content))
response.write(<hr>)
rs.MoveNext
Loop
end if
rs.close
Set rs = Nothing
conn.close
set conn=Nothing
%>

  嗯,这是一个典型的读取数据并显示的例子,参见:
嗯,确实简单。从上至下,很容易明白。但是当你对多个表进行读插删改的时候,当你的代码里有很多HTMLjs混杂的时候,你会有疑问:为什么有这么多东西要重复呢?
所以一般我们把一些简单的操作独立出来,写成类或者函数放进包含文件(include)。

  那么以上的操作我们可以使用两个文件来实现:

  conn.asp
<%
db_path = database/cnbruce.mdb
connstr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Server.MapPath(db_path)
conn.Open connstr
%>

  showit.asp
<!--#include file=conn.asp -->
<%
Set rs = Server.CreateObject (ADODB.Recordset)
sql = Select * from cnarticle
rs.Open sql,conn,1,1
if rs.EOF and rs.BOF then
response.write (暂时还没有文章)
else
Do Until rs.EOF
response.write(文章标题是: rs(cn_title))
response.write(<br>文章作者是: rs(cn_author))
response.write(<br>文章加入时间是: rs(cn_time))
response.write(<br>文章内容是: rs(cn_content))
response.write(<hr>)
rs.MoveNext
Loop
end if
rs.close
Set rs = Nothing
conn.close
set conn=Nothing
%>

  参考:

  现在相对简单多了,如果有多个操作页面我们只要导入连接文件就可以了,不过还是不够简洁,哪里不简洁?
一直在创建server,一直在写close,这样很容易出错,并且看起来与内容无关的太多。

  那我再改进下:
把conn.asp文件改成:
<%
Dim Conn
Dim Rs
Sub CloseDatabase
Conn.close
Set Conn = Nothing
End Sub
Sub OpenDatabase
Dim StrServer,StrUid,StrSaPwd,StrDbName
StrServer=192.168.1.1数据库服务器名
StrUid=sa 您的登录帐号
StrSaPwd= 您的登录密码
StrDbName=cnbruce.mdb 您的数据库名称
用于连接ACCESS
Conn.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0; Data Source= Server.MapPath(StrDbName)
用于连接MSSQL
Conn.ConnectionString = Driver={sql server};driver={SQL server};server=StrServer;uid=StrUid;pwd=StrSaPwd;database=
StrDbName
set rs=server.CreateObject(ADODB.RecordSet)
conn.open
if Err Then
err.Clear
Set Conn = Nothing
GBL_CHK_TempStr = GBL_CHK_TempStr 数据库连接错误!
Response.Write GBL_CHK_TempStr
Response.End
End If
End Sub
%>

  现在我们的showit.asp可以这样写:

  showit.asp
<!--#include file=conn.asp -->
<%
sql = Select * from cnarticle
opendatabase
rs.Open sql,conn,1,1
If not Rs.eof then
Do Until rs.EOF
response.write(文章标题是: rs(cn_title))
response.write(<br>文章作者是: rs(cn_author))
response.write(<br>文章加入时间是: rs(cn_time))
response.write(<br>文章内容是: rs(cn_content))
response.write(<hr>)
rs.MoveNext
Loop
else
response.write (暂时还没有文章)
end if
Closedatabase
%>

  嗯,我们又少写了一些东西,这样是最简单的吗?当然不是!还可以更简单。
使用GetRows把查询出来的数据传给一个变量,使用ubound方法取得数据记录条数。
不明白?没关系,让我们继续往下看:

  再建个文件:sql.asp

  sql.asp
<%
Class DataTable
public Function SelectData(sql)
If sql<> then
opendatabase
Rs.open sql,conn,1,1
If not Rs.eof then
Thedata=Rs.GetRows(-1)
Closedatabase
Else
Closedatabase
End If
End If
SelectData=Thedata
End Function
End Class
%>

  嗯,复制它就可以了,现在我们的showit.asp可以简单地这样写:

  showit.asp
<!--#include file=conn.asp -->
<!--#include file=sql.asp -->
<%
sql = Select * from cnarticle
set loadData=new DataTable
Thedata=loadData.SelectData(sql)
If isarray(Thedata) then
Num=ubound(Thedata,2)
for i=0 to Num
response.write(文章标题是: Thedata(1,i))
response.write(<br>文章作者是: Thedata(2,i))
response.write(<br>文章加入时间是: Thedata(3,i))
response.write(<br>文章内容是: Thedata(4,i))
&nbs


评论


亲,登录后才可以留言!