精華區beta Programming 關於我們 聯絡資訊
※ 引述《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