日期:2014-05-16 浏览次数:20504 次
众所周知,我们在做程序时,都要与数据库进行连接。有时我们习惯没有加载窗体过渡,直接进入主界面,而此时又要进行数据库连接,再没有和主窗体分开线程时,就会出现卡的现象。 如果不通,刚至少要等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 (!