台灣最大程式設計社群網站
線上人數
535
 
會員總數:245973
討論主題:189551
歡迎您免費加入會員
討論區列表 >> MySQL >> 資料庫的連線與斷線時機與處置
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
資料庫的連線與斷線時機與處置
價值 : 84 QP  點閱數:2017 回應數:4
樓主

bon
門外漢
0 23
590 43
發送站內信

各位好

我將所有面對資料庫的程式寫在DLL內,包含連線的Open、Close、SQL語句組合與使用者輸入檢查等功能。
為了方便查看誰在線上,我讓使用者啟動程式時Open,關閉程式時Close。目前為止還沒用到需要同時開啟兩個以上的連線,所以這樣子做還OK。
當使用者網路中斷後(例如拔掉網路線),判斷連線State仍會判定是Open狀態,執行SQL就會報錯。所以我將執行部分包在try catch內,出現問題時就重新Open。

問題是,假如使用者放棄重新連線,沒有辦法從DLL中離開、關閉主程式,就必須在工作管理員做強制關閉。
假如重新連線的動作寫在主程式,那程式中每一個需要用到資料庫的地方就要額外加入連線判斷式。
請問各位是如何處理連線中斷的問題?



搜尋相關Tags的文章: [ 連線 ] , [ 斷線 ] ,
本篇文章發表於2016-11-15 18:12
1樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
正常來說,如果發生資料庫連結錯誤。不是直接就將程式關閉。要不然就是先導向一個初始頁去。

一般如果是應用程式。我大多會用ip偵測連線是否在線上。(但要調整一個時間才做檢查)
本篇文章回覆於2016-11-16 09:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

bon
檢舉此回應
謝謝您的回覆。

我在DLL中寫的資料庫存取函式,當DLL出錯時關閉主程式。我希望從DLL中主動關閉程式,而不是在主程式呼叫的地方判斷是否成功,那呼叫一百次不就要寫一百次if-else。

考慮過把主程式Form丟進DLL,在DLL裡面用form.Close()關閉程式,不過在主程式呼叫DLL之後仍會繼續執行剩下的程式,這不是我要的。
後來我在DLL裡面的try-catch用Environment.Exit(1)來強制關閉整個程式,不過有時候會出現「建立視窗控制代碼時發生錯誤」的狀況,不了解為什麼會這樣。


本篇文章回覆於2016-11-16 14:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實你的問題比較不屬於mysql的問題了。

關於form開發式的程式我並不是專門。
但從你的說明中,倒是明白了幾件事。

首先你所謂的寫一百次if-else
為何會需要這樣寫呢??

再者:發生了「建立視窗控制代碼時發生錯誤」
理當會有一些控制的代碼出現。你該去找那些文章才行。

基本上視窗關閉的動作,並非不是可以完全關閉的。
如果主視窗內又有其它子視窗正在處理或啟用。就會發生這樣的事。

大多數的做法。會在主視窗內建一個關閉的事件動作。
然後子程序或物件就繼承主視窗。如有發生問題則是呼叫主視窗的關閉動作這樣才會比較好。

一般來說,直接使用exit的做法,能少用就盡量少用。因為這種強迫式的關閉有時真的很危險。
本篇文章回覆於2016-11-21 11:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

bon
檢舉此回應
謝謝,的確我的問題應該是C#方面的才對。
重新發在C#討論區。
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20161128151555HR4&fumcde=FUM20050124192253INM

本篇文章回覆於2016-11-28 15:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.