可能平時我們在用vb寫程序的過程中,會忽視一些面向對象的思想。希望通過一個例子能夠對大家起到拋磚引玉的作用,我們舉一個vb訪問數據庫的例子。這是本人第一次寫技術方面的文章,請大家支持??!qq:16644686
1。經常出現的寫法
在vb中實現對數據庫的訪問,我們可能會通過一個全局函數來實現,例如以下的代碼:
public function dbsqlopen(strname as string, strpwd as string, _
strip as string, strdatabase as string) as adodb.connection
'purpose: 連接sql數據庫
'accepts:
' strname-------登陸服務器用戶名
' strpwd--------登陸服務器密碼
' strip---------服務器地址
' strdatabase---數據庫名
'return: 連接對象
dim madocon as adodb.connection '///////////////////////////////
set madocon = new adodb.connection
madocon.connectionstring = "provider=sqloledb.1;persist security info=false;user id=" _
& strname & ";pwd=" & strpwd & ";initial catalog=" & strdatabase & ";data source=" & strip & ""
madocon.open
set dbsqlopen = madocon
end function
然后在其它地方要用到ado連接的時候就通過該函數來返回。比如:
private sub form_load()
set rs = new adodb.recordset
rs.cursortype = adopenkeyset
rs.locktype = adlockpessimistic
rs.activeconnection = dbsqlopen(strlocalname, strlocalpwd, "(local)", strlocaldb)
........
end sub
程序中如果采用這種方式來實現連接數據庫,效率非常的低下。你每用到一次dbsqlopen這個全局函數,全局函數里面聲明的adodb.connection就會open一次,假如你的程序頻繁調用這個全局函數,可想而之程序的效率將會多么的低下。如何避免這種設計方式呢?我們采用下面的方式。
2.改進的寫法
假如我們設計一個類來實現數據庫訪問就會避免這樣的問題。具體代碼如下:
private m_adoconn as new adodb.connection
private m_adorecordset as new adodb.recordset
public function dbinit()
set m_adoconn = nothing
set m_adorecordset = nothing
end function
public function dbend()
m_adorecordset.close
m_adoconn.close
set m_adorecordset = nothing
set m_conn = nothing
end function
public function dbsqlopen(strname as string, strpwd as string, _
strip as string, strdatabase as string)
m_adoconn.connectionstring = "provider=sqloledb.1;persist security info=false;user id=" _
& strname & ";pwd=" & strpwd & ";initial catalog=" & strdatabase & ";data source=" & strip & ""
m_adoconn.connectiontimeout = 5
m_adoconn.open
end function
public function dbgetconn() as adodb.connection
dbgetconn = m_adoconn
end function
我們在模塊里面可以聲明一個public m_dbclass as dbclass來實現對數據庫的訪問。
private sub command1_click()
dim rs1 as adodb.recordset
rs1.activeconnection = m_dbclass.dbgetconn
end sub
private sub form_load()
dim strname as string
dim strpwd as string
dim strip as string
dim strdatabase as string
strname = "sa"
strpwd = ""
strip = "192.168.0.37"
strdatabase = ""
m_dbclass.dbinit
m_dbclass.dbsqlopen strname, strpwd, strip, strdatabase
end sub
private sub form_unload(cancel as integer)
m_dbclass.dbend
end sub
每一次要用到數據庫連接的時候我們就通過類里面的dbgetconn方法來返回一個adodb.connection。
新聞熱點
疑難解答