用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”。
    这么方便、快捷、高效、易排错的方法,你会不会错过,我不知道,反正我是不会错过了!

版权声明:本文为博主原创文章,未经博主容许不得转载。数据库

相关文章
相关标签/搜索