采用Socket方式,测试服务器连接

        /// <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;
        }




        #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
        
        private void btnSocket_Click(object sender, EventArgs e) 
        { 
          string strCon = "Data Source=;Initial Catalog=;User ID=;password="; 
          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","连接服务器"); 
        }
        
        
        
        Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=))(CONNECT_DATA=(SERVICE_NAME=)));User Id=;Password=
        
        
        
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Sockets;
using System.Text;


namespace ZT_WhiteList_GuiZhouShiFan
{
    public class TestConnect
    {
        /// <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 tc = new TcpClient();
            try
            {
                var ar = tc.BeginConnect(host, port, null, null);
                ar.AsyncWaitHandle.WaitOne(millisecondsTimeout);
                return tc.Connected;
            }
            catch (Exception e)
            {


                throw e;
            }
            finally
            {
                tc.Close();
            }
        }


        /// <summary>
        /// 根据数据库连接字符串判断连接数据库是否正确
        /// </summary>
        /// <param name="connectionString">数据库连接操作</param>
        /// <returns></returns>
        public static bool TestSqlConnextion(string connectionString)
        {
            bool result = true;
            try
            {
                SqlConnection sc = new SqlConnection(connectionString);
                sc.Open();
                sc.Close();
                sc.Dispose();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.ToString());
                result = false;
            }
            return result;
        }


        /// <summary>
        /// 使用config中sql连接判断是否连接到服务器并且成功连接数据库
        /// </summary>
        /// <param name="SqlserverConnectionSting"></param>
        /// <returns></returns>
        public static object[] TestSqlServerStart(string SqlserverConnectionSting)
        {
            object[] returnList = new object[] { };
            string[] serverIpList = SqlserverConnectionSting.Split(';');
            string tempStringHost = string.Empty;
            string tempStringPort = string.Empty;
            foreach (var item in serverIpList)
            {
                string tempstringItem = item.ToLower();
                if (item.Contains("server"))
                {
                    tempStringHost = tempstringItem.Split('=')[1].ToString();
                    if (tempStringHost.Contains(":"))
                    {
                        tempStringPort = tempStringHost.Split(':')[0].ToString();
                    }
                    else
                    {
                        tempStringPort = "1433";
                        break;
                    }
                }
            }
            if (TestConnect.TestConnection(tempStringHost, int.Parse(tempStringPort), 60))
            {
                returnList = new object[] { true, 1, "Socket Link Succeed", "连接服务器" };
                if (TestConnect.TestSqlConnextion(SqlserverConnectionSting))
                    returnList = new object[] { true, 2, "Sql Link Succeed", "连接数据库" };
                else
                    returnList = new object[] { false, 2, "Sql Link Failed", "连接数据库" };
            }
            else
            {
                returnList = new object[] { false, 1, "Socket Link Failed", "连接服务器" };
            }


            return returnList;
        }




        /// <summary>
        /// 使用config中ORCA连接判断是否连接到服务器并且成功连接数据库
        /// </summary>
        /// <param name="ORCAConnectionSting"></param>
        /// <returns></returns>
        public static object[] TestORCAStart(string ORCAConnectionSting)
        {
            object[] returnList = new object[] { };
            ORCAConnectionSting = ORCAConnectionSting.ToUpper();
            int pos_Host = ORCAConnectionSting.IndexOf("HOST", 0);
            int pos_HostEnd = ORCAConnectionSting.IndexOf(")", pos_Host);
            string host = ORCAConnectionSting.Substring(pos_Host + 1, pos_HostEnd - pos_Host - 1);
            host = host.Split('=')[1];


            int pos_Port = ORCAConnectionSting.IndexOf("PORT", 0);
            int pos_PortEnd = ORCAConnectionSting.IndexOf(")", pos_Port);
            string port = ORCAConnectionSting.Substring(pos_Port, pos_PortEnd - pos_Port - 1);
            port = port.Split('=')[1];


            if (TestConnect.TestConnection(host, int.Parse(port), 60))
            {
                returnList = new object[] { true, 1, "Socket Link Succeed", "连接服务器" };
                if (TestConnect.TestSqlConnextion(ORCAConnectionSting))
                    returnList = new object[] { true, 2, "Sql Link Succeed", "连接数据库" };
                else
                    returnList = new object[] { false, 2, "Sql Link Failed", "连接数据库" };
            }
            else
            {
                returnList = new object[] { false, 1, "Socket Link Failed", "连接服务器" };
            }
            return returnList;
        }
    }
}


参考:http://www.jb51.net/article/65019.htm

20180601增加:

     增加异常判断:

catch (Exception ex)

            {
                if (ex is System.Data.SqlClient.SqlException)
                {
                    LogInfo(DateTime.Now.ToString() + ex.ToString());
                    MessageBox.Show("连接数据库失败,请检查网络稍后重试", "连接服务器");
                }
                else
                {
                    LogInfo(DateTime.Now.ToString() + ex.ToString());
                    MessageBox.Show(ex.ToString());
                }
            }

这样处理起来更舒服点



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值