※ 引述《Carbonman.bbs@ptt.cc (是誰在操縱我們)》之銘言:
> ※ 引述《lobnqii@kkcity.com.tw (lobnqii)》之銘言:
> : 程式這樣寫有點奇怪!
> : 1. connection 打開之後
> : 2. 給一個SQL字串,例:sSQL=" select * from employee"
> : 3. 設定查詢給果給recordset 即可。 ==> set rsTemp=adoCnn.Execute(sSQL)
> : 4. 要結束connection 給它 nothing => set adoCnn=nothing
> : 5. 一起給recordset nothing => set rsTemp=nothing
> : 以上是我用過最靈活的寫法。大部份的書都介紹 command做法,其實connection
> : 本身就已有存取的方式。(覺得用command方式有點杵)
> 但是在查詢MSDN後,
> 他建議一個connection建立之後,
> 最好執行完一個命令就關閉connection.
> 這樣真的好嗎?
也許MSDN有它不為人知的理由,但想想,您進入一個系統中的每一頁皆要開關
一次,這樣有效率嗎?
我的作法是登入後就打開一個connection,並指定給一個全域變數,以後就每
一支程式就使用該全域變數即可,至使用者登出才關閉。
若是資料庫版權不足,以上的方式是最佳方案,讓所有使用者之查詢就在佇列
中排隊,通常一個新增、更新指令不過幾毫秒,所以排隊不會很久。
倒是select的語法會佔許多時間及硬體空間。比較新型的資料庫例如
MS SQL 2000,Oracle等,用select所「掃過」的表格(tables)及資料列(rows)
會「鎖住」(這裡視transaction level而定,共四級可在MSDN中查到),所以
用select之後要趕快把資料處理掉,不然人一多,那可能導致尾端的人
over time.
同時,在使用前要block (adoCnn.BeginTrans),結束後要release(adoCnn.
CommitTrans),這樣資料在使用中途才不會被其它人插花。
通用(Ansi SQL 89,92)簡例:
sSQL="select * from Test where fTest =..."
adoCnn.BeginTrans
set rsTemp=adoCnn.Execute(sSQL)
if RSIsNormal(rsTemp) then
sSQL=" insert into Test(...) values(...)"
adoCnn.Execute sSQL '此處不能有括號
else
.....
end if
adoCnn.CommitTrans
function RSIsNormal(rsResult)
...
end function
祝如意
--
┌─────◆KKCITY◆─────┐★☆ 數十萬首歌曲,22種音樂分類 ☆★
│ bbs.kkcity.com.tw │□□ 與各大唱片行同步的音樂收藏 □□
└──《From:203.204.90.144 》──┘快來~KKBOX →http://www.kkbox.com.tw