欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用Socket快速判斷數據庫連接是否正常的方法

 更新時間:2015年04月27日 14:52:51   作者:依山帶水  
這篇文章主要介紹了C#使用Socket快速判斷數據庫連接是否正常的方法,涉及C#中socket操作的相關技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了C#使用Socket快速判斷數據庫連接是否正常的方法。分享給大家供大家參考。具體分析如下:

大家在做項目的時候,一般都是和數據庫有關的。而相信許多人在用代碼打開數據庫的時候,沒有判斷數據庫連接是否成功。如果寫對了還好,但是出錯了,會等老長時間(默認15s,不過 實際響應 可能會更長)。而且還會出現(xiàn)卡死的情況,給用戶的感覺就會變得非常差勁。所以快速判斷數據庫連接是否成功,就顯得尤為重要了。
 
一般情況下,如果連接字符串正確,那么連接到數據庫用的時間一般在5s以內。所以我們可以在連接字符串的最后添加一個等待時間:timeout。如:

復制代碼 代碼如下:
string strCon = "Data Source=192.168.24.66;Initial Catalog=master;User ID=sa;password=123456;Connection Timeout=5";

如果連接不成功,應該在5-8s內做出回應。但是并不能確定一定是連接字符串出錯。如果大量人訪問的話,很可能會出現(xiàn)等待時間超過5s的情況。而且,如果連接不成功,我們依舊最起碼得等待5秒。等待的滋味是不好受的,用戶一定會給你一個叉叉,所以我們還需要用其他辦法來快速判斷。

這里我們用Socket來實現(xiàn)這一功能。(至于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]; 
  //發(fā)送數據,判斷是否連接到指定ip 
  if (TestConnection(strIP , 1433, 500)) 
  { 
   //連接成功 
   MessageBox.Show("Socket Link Succeed","連接服務器"); 
   // 數據庫操作,我這里用了連接測試??筛鶕愕南到y(tǒng)自行修改 
   if (TestConnection(strCon)) 
    MessageBox.Show("Sql Link Succeed","連接數據庫"); 
   else 
    MessageBox.Show("Sql Link Failed", "連接數據庫"); 
  } 
  else 
   MessageBox.Show("Socket Link Failed","連接服務器"); 
}

用Socket來測試是否連接到服務器非常方便,也非??旖荩挥米層脩舻却敲撮L時間,而且這樣做還可以知道是服務器地址出錯,還是數據庫出錯。經測試,如果數據庫地址出錯,在1-3s內即可反饋出結果。提示用戶“Socket Link Failed”。而數據庫名錯誤,則只提示“Sql Link Failed”。

這么方便、快捷、高效、易排錯的方法,你會不會錯過,我不知道,反正我是不會錯過了!

希望本文所述對大家的C#程序設計有所幫助。

相關文章

  • C#中Invoke 和 BeginInvoke 的真正涵義

    C#中Invoke 和 BeginInvoke 的真正涵義

    這篇文章主要介紹了C#中Invoke 和 BeginInvoke 的真正涵義,需要的朋友可以參考下
    2014-10-10
  • C#如何檢測操作系統(tǒng)版本

    C#如何檢測操作系統(tǒng)版本

    這篇文章主要為大家詳細介紹了C#如何檢測操作系統(tǒng)版本的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • C#開發(fā)Winform程序調用存儲過程

    C#開發(fā)Winform程序調用存儲過程

    這篇文章介紹了C#開發(fā)Winform程序調用存儲過程的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#中out與ref作用區(qū)別示例分析

    C#中out與ref作用區(qū)別示例分析

    這篇文章主要為大家介紹了C#中out與ref作用區(qū)別示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Unity3D實現(xiàn)甜品消消樂游戲

    Unity3D實現(xiàn)甜品消消樂游戲

    這篇文章主要介紹了通過C# Unity3D繪制一個甜品消消樂游戲,文中的示例代碼講解詳細,對我們學習或工作有一定的幫助,感興趣的小伙伴可以學習一下
    2021-12-12
  • C#中DataTable 轉實體實例詳解

    C#中DataTable 轉實體實例詳解

    這篇文章主要介紹了C#中DataTable 轉實體實例詳解,需要的朋友可以參考下
    2017-04-04
  • Winform中Treeview實現(xiàn)按需加載的方法

    Winform中Treeview實現(xiàn)按需加載的方法

    這篇文章主要介紹了Winform中Treeview實現(xiàn)按需加載的方法,針對大數據量的情況下非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • C#用RabbitMQ實現(xiàn)消息訂閱與發(fā)布

    C#用RabbitMQ實現(xiàn)消息訂閱與發(fā)布

    在消息隊列模型中,如何將消息廣播到所有的消費者,這種模式成為“發(fā)布/訂閱”。本文主要以一個簡單的小例子,簡述通過fanout交換機,實現(xiàn)消息的發(fā)布與訂閱,僅供學習分享使用,如有不足之處,還請指正。
    2021-05-05
  • c# 如何對網絡信息進行相關設置(ip,dns,網關等)

    c# 如何對網絡信息進行相關設置(ip,dns,網關等)

    這篇文章主要介紹了c# 網絡適配器的相關操作,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#如何使用Task類解決線程的等待問題

    C#如何使用Task類解決線程的等待問題

    這篇文章主要介紹了C#如何使用Task類解決線程的等待問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論