關於資料庫連接的一點意見

來源:互聯網
上載者:User
資料|資料庫|資料庫連接 最近經常見到有人問如何串連資料庫效率最高,耗費資源最低,在這裡我談一下我的看法。串連資料庫不外乎三種方
法,一種是將資料庫連接放到session變數中,一種是放到application變數中,再一種就是在頁面中使用時開啟,用完立
刻關閉。儘管前兩種方法用起來比較方便,但應該說第三種方法是最好的,下面我分別講一下,由於水平所限,錯誤難
免,請大家指正。

session:用session的缺點顯而易見,伺服器會為每一個使用者建立一個資料連線,直到這個使用者離開或session逾時,
這樣就會大大浪費伺服器資源,如果訪問量大的話,系統資源就會被耗盡,或者資料庫連結數到達上界,就會造成程式出
錯。

application:既然用session會出現這麼多問題,那是不是用application最節省資源呢?只建立一條串連就夠了,大
家共用。不是這樣的,如果無論多少使用者只建立一條串連,同樣會帶來很多問題,首先是如果訪問量大,一條串連肯定無
法滿足需要,同樣會造成程式出錯;其次,如果你用了私人暫存資料表或游標,那麻煩就來了。私人暫存資料表和游標只對當前連
接可見,可是如果大家都用一條串連,那麼就會產生衝突,造成程式錯誤。

最後一種方法(即開即用即關):這是最好的一種方法,原因如下:開啟資料庫連接,使用完立即關閉,是一種良好的
編程習慣,其實不僅是資料庫連接對象如此,所有對象也就是說server.creatobject出來的對象理論上生存期都不能超過
0.01秒(國外有人做過測試的,不是我信口開河),如果超過就會對效率產生影響。那麼也許你會說每個頁面都會開啟一個
串連,那開啟的串連數不是更多,效率不是更低嗎?錯了,講到這裡就不能不提一下串連池(也叫共用池的概念),現在
的大型資料庫包括odbc本身都提供串連池的功能,他的基本原理是這樣的,一個串連申請關閉時系統並不是真的關閉它,
而是將它放到共用池中,如果這時有相同的串連請求,系統就會把這個串連從共用池中取出來給使用者,這樣就省去了關閉
和開啟串連的系統開銷,只有當這個串連長時間不被請求時並且共性池中的串連飽和,系統才會真的幹掉它。明白這個道
理,你就明白儘管你在程式中請求開啟和關閉串連,但系統並不一定要增加這些開銷的。

道理講完了,現在給例子。下面是開啟和關閉資料庫連接的兩個函數,你可以把它存為一個include檔案,使用時包含
進來就行了。例子串連的資料庫是sql server 7.0,我沒用odbc,因為用oledb效率高的多。

<script language = VBScript runat = server>
'---------------------------------------------------------------------------------
'
' file name : connectdb.inc
'
' Description: 資料庫連接
'
' function list : OpenDbConnection(a_strDataName , a_strServerName) :開啟資料庫連接
' parameter: a_strDateName , 資料庫伺服器名
' a_strServerName :資料庫server名
'
' CloseDbConnection(a_objDbConn) :關閉資料庫連接
' parameter: a_ObjDbConn ,連線物件
'
'
' date: 2000/05/03
'
' Author: LiuYunpeng
'
' History: 2000/05/03 version 1.0
' 2000/06/03 modified function opendbconnection's parameters
' by LiuYunpeng
'--------------------------------------------------------------------------------


Function OpenDbConnection(a_strDataName , a_strServerName)
dim m_DbConn , m_strConn
Set m_dbConn = Server.CreateObject("ADODB.Connection")
m_strConn = "Provider=Sqloledb ; User ID = sa ; Password= ; Initial Catalog = "&a_strDataName&" ;
Data Source = "&a_strServerName
m_dbConn.open m_strConn
Call CheckError()

'return this database connection
Set OpenDbConnection = m_dbConn
end function

sub CloseDbConnection(a_objDbconn)
a_objDbconn.close
set a_objDbConn = nothing
end sub


</script>



簡單說一下使用方法,假設你的資料庫server是"server1" , 資料庫是"mydatabase" , 則使用如下

<%
dim m_objConn

'開啟資料庫連接
set m_objConn = OpenDbConnection("mydatabase" , "server1")
....

'關閉資料庫連接
CloseDbConnection m_objConn
%>



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。