程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#應用Socket疾速斷定數據庫銜接能否正常的辦法

C#應用Socket疾速斷定數據庫銜接能否正常的辦法

編輯:C#入門知識

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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved