一個ACCESS數(shù)據(jù)庫訪問的類第1/3頁
大部分asp應(yīng)用,都離不開對數(shù)據(jù)庫的訪問及操作,所以,對于數(shù)據(jù)庫部分的訪問操作,我們應(yīng)該單獨抽象出來,封裝成一個單獨的類。如果所用語言支持繼承,可以封裝一個這樣的類,然后在數(shù)據(jù)操作層繼承即可。下面是我寫的一個access數(shù)據(jù)庫訪問的類,針對access作了優(yōu)化,不過因為缺少足夠的應(yīng)用測試,可能仍然存在未知的bug及應(yīng)用限制,主要代碼如下:
<%
class oledb private idatapath
private iconnectionstring private conn
private cmd
private param
private rs public property let datapath(byval value)
idatapath = value
iconnectionstring = "provider = microsoft.jet.oledb.4.0;data source = " & server.mappath(idatapath)
end property public property get datapath()
datapath = idatapath
end property public property let connectionstring(byval value)
iconnectionstring = value
end property public property get connectionstring()
connectionstring = iconnectionstring
end property public function openconn()
if conn.state = adstateclosed then
conn.open connectionstring
end if
set openconn = conn
end function public function insert(byval sql, byval values)
openconn()
rs.open sql, conn, 3, 3, adcmdtext
rs.addnew
dim i, l
l = ubound(values)
for i = 1 to l + 1
rs(i) = values(i - 1)
next
rs.update
insert = rs(0)
end function public function execute(byval sql)
openconn()
set execute = conn.execute(sql)
end function public function executescalar(byval sql)
dim irs : set irs = execute(sql)
if not irs.bof then executescalar = irs(0)
end function public function executenonquery(byval sql)
openconn()
call conn.execute(sql, executenonquery)
end function public function insertsp(byval sql, byval params)
openconn()
rs.open sql, conn, 3, 3, adcmdstoredproc
rs.addnew
dim i, l
l = ubound(params)
for i = 1 to l + 1
rs(i) = params(i - 1)
next
rs.update
insertsp = rs(0)
end function public function executesp(byval spname, byval params)
with cmd
set .activeconnection = openconn()
.commandtext = spname
.commandtype = &h0004
.prepared = true
set executesp = .execute(,params)
end with
end function public function executedatatablesp(byval spname, byval params)
openconn()
if rs.state <> adstateclose then
rs.close()
end if
dim spstr
if isnull(params) or isempty(params) then
spstr = spname
else
if isarray(params) then
spstr = "execute " & spname & " " & join(params, ",")
else
spstr = "execute " & spname & " " & params
end if
end if
call rs.open(spstr, conn, 1, 1, adcmdstoredproc)
set executedatatablesp = rs
end function public function executescalarsp(byval spname, byval params)
dim irs : set irs = executesp(spname, params)
if not irs.bof then executescalarsp = irs(0)
end function public function executenonquerysp(byval spname, byval params)
with cmd
set .activeconnection = openconn()
.commandtext = spname
.commandtype = &h0004
.prepared = true
call .execute(executenonquerysp, params)
end with
end function private sub class_initialize()
set conn = server.createobject("adodb.connection")
set cmd = server.createobject("adodb.command")
set param = server.createobject("adodb.parameter")
set rs = server.createobject("adodb.recordset")
datapath = "/data/data.mdb" '這里寫你的數(shù)據(jù)庫默認路徑,建議更改名稱及擴展名
end sub
private sub class_terminate()
set param = nothing
set cmd = nothing
closers()
closeconn()
end sub private sub closeconn()
if conn.state <> adstateclose then
conn.close()
set conn = nothing
end if
end sub private sub closers()
if rs.state <> adstateclose then
rs.close()
set rs = nothing
end if
end sub end class
%> 
相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频