日期:2014-05-16  浏览次数:20473 次

判断SQL数据库是否通畅,加快返回速度,取消延迟或超时时才反馈回来!

  众所周知,我们在做程序时,都要与数据库进行连接。有时我们习惯没有加载窗体过渡,直接进入主界面,而此时又要进行数据库连接,再没有和主窗体分开线程时,就会出现卡的现象。 如果不通,刚至少要等30秒以上才会有结果,通了则非常 快。但我们不需要他们那么长的等待时间,仔细分析一下过程就知道了,病因在何处。


 通常的连接字符串为: <add name="connStr" connectionString="Data Source=A;Initial Catalog=D;Persist Security Info=True;Connect Timeout=4;uid=sa;pwd=sa1" providerName="System.Data.SqlClient"></add>

就算Connect Timeout=4 设置了4秒,但在尝试时连接时还是卡,前提是到服务器A的地址不通,C#程序在时行连接时,先要对地址A进行通否判断,这样就出现了延时现象,如果地址是通,密码错,或数据名字错都会很快返回错误信息。既然我们知道了卡在哪,就针对它来时行改进。


我们在开始运行里 打入 cmd, 进入DOS黑屏界面,输入ping A,其实很快就返回是否成功。但我们用DNS解析时就会出现慢的问题。所以我们在尝试之前,先判断A是否通,如果不通则不必要进行下次打开连接了。


直接提供个简单的小类:

    public static class NetIPIsPass
    {
        /// <summary> 
        /// 验证IP地址字符串的正确性 
        /// </summary> 
        /// <param name="strIP">要验证的IP地址字符串</param> 
        /// <returns>格式是否正确,正确为 true 否则为 false</returns> 
        internal static bool CheckIPAddr(string strIP)
        {
            if (string.IsNullOrEmpty(strIP))
            {
                return false;
            }
            // 保持要返回的信息 
            bool bRes = true;
            int iTmp = 0;    // 保持每个由“.”分隔的整型 
            string[] ipSplit = strIP.Split('.');
            if (ipSplit.Length < 4 || string.IsNullOrEmpty(ipSplit[0]) ||
                string.IsNullOrEmpty(ipSplit[1]) ||
                string.IsNullOrEmpty(ipSplit[2]) ||
                string.IsNullOrEmpty(ipSplit[3]))
            {
                bRes = false;
            }
            else
            {
                for (int i = 0; i < ipSplit.Length; i++)
                {
                    if (!int.TryParse(ipSplit[i], out iTmp) || iTmp < 0 || iTmp > 255)
                    {
                        bRes = false;
                        break;
                    }
                }
            }


            return bRes;
        }
        /// <summary> 
        /// 验证某个IP是否可ping通 
        /// </summary> 
        /// <param name="strIP">要验证的IP</param> 
        /// <returns>是否可连通  是:true 否:false</returns> 
        public static bool TestNetConnectity(string strIP)
        {
            if (!