C#應用Socket疾速斷定數據庫銜接能否正常的辦法。本站提示廣大學習愛好者:(C#應用Socket疾速斷定數據庫銜接能否正常的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#應用Socket疾速斷定數據庫銜接能否正常的辦法正文
本文實例講述了C#應用Socket疾速斷定數據庫銜接能否正常的辦法。分享給年夜家供年夜家參考。詳細剖析以下:
年夜家在做項目標時刻,普通都是和數據庫有關的。而信任很多人在用代碼翻開數據庫的時刻,沒有斷定數據庫銜接能否勝利。假如寫對了還好,然則失足了,會等老長時光(默許15s,不外 現實呼應 能夠會更長)。並且還會湧現卡逝世的情形,給用戶的感到就會變得異常低劣。所以疾速斷定數據庫銜接能否勝利,就顯得尤其主要了。
普通情形下,假如銜接字符串准確,那末銜接到數據庫用的時光普通在5s之內。所以我們可以在銜接字符串的最初添加一個期待時光:timeout。如:
string strCon = "Data Source=192.168.24.66;Initial Catalog=master;User ID=sa;password=123456;Connection Timeout=5";
假如銜接不勝利,應當在5-8s內做出回應。然則其實不能肯定必定是銜接字符串失足。假如年夜量人拜訪的話,極可能會湧現期待時光跨越5s的情形。並且,假如銜接不勝利,我們照舊最最少得期待5秒。期待的味道是欠好受的,用戶必定會給你一個叉叉,所以我們還須要用其他方法來疾速斷定。
這裡我們用Socket來完成這一功效。(至於Socket是甚麼,有興致的同伙可以本身查查材料)
先用Socket來斷定與辦事器能否銜接勝利,然後在停止數據庫操作。
#region 采取Socket方法,測試辦事器銜接 /// <summary> /// 采取Socket方法,測試辦事器銜接 /// </summary> /// <param name="host">辦事器主機名或IP</param> /// <param name="port">端標語</param> /// <param name="millisecondsTimeout">期待時光:毫秒</param> /// <returns></returns> public static bool TestConnection(string host, int port, int millisecondsTimeout) { TcpClient client = new TcpClient(); try { var ar = client.BeginConnect(host, port, null, null); ar.AsyncWaitHandle.WaitOne(millisecondsTimeout); return client.Connected; } catch (Exception e) { throw e; } finally { client.Close(); } } #endregion
上面是數據庫的操作,可以依據本身的情形修正。
/// <summary> /// 數據庫銜接操作,可調換為你本身的法式 /// </summary> /// <param name="ConnectionString">銜接字符串</param> /// <returns></returns> private static bool TestConnection(string ConnectionString) { bool result = true; try { SqlConnection m_myConnection = new SqlConnection(ConnectionString); m_myConnection.Open(); //數據庫操作...... m_myConnection.Close(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); result = false; } return result; }
我這裡用winForm來測試的。
private void btnSocket_Click(object sender, EventArgs e) { string strCon = "Data Source=192.168.24.566;Initial Catalog=qmaster;User ID=sa;password=123456"; string[] s=strCon.Split(';'); s = s[0].Split('='); //獲得IP string strIP =s[1]; //發送數據,斷定能否銜接到指定ip if (TestConnection(strIP , 1433, 500)) { //銜接勝利 MessageBox.Show("Socket Link Succeed","銜接辦事器"); // 數據庫操作,我這裡用了銜接測試。可依據你的體系自行修正 if (TestConnection(strCon)) MessageBox.Show("Sql Link Succeed","銜接數據庫"); else MessageBox.Show("Sql Link Failed", "銜接數據庫"); } else MessageBox.Show("Socket Link Failed","銜接辦事器"); }
用Socket來測試能否銜接到辦事器異常便利,也異常快捷,不消讓用戶期待那末長時光,並且如許做還可以曉得是辦事器地址失足,照樣數據庫失足。經測試,假如數據庫地址失足,在1-3s內便可反應出成果。提醒用戶“Socket Link Failed”。而數據庫名毛病,則只提醒“Sql Link Failed”。
這麼便利、快捷、高效、易排錯的辦法,你會不會錯過,我不曉得,橫豎我是不會錯過了!
願望本文所述對年夜家的C#法式設計有所贊助。