一.服务器超时是什么:
解: 1.TCP超时,网络不稳定或者断开连接,造成无法连接服务器地址。
2.SqlConnection.Open超时,主要跟App.config连接数据库属性相关。
3.SqlCommand.Execute超时,主要与数据库握手超时失败造成。
二.解决服务器超时的目的:
解: 1.为了解决客户端在网络不稳定或者断开的时候,显示友好的提示,而不是系统提示,造成系统无限等待,造成假死界面。
三.解决服务器超时的做法:
解: 1.TCP超时:通过线程控制,根据设定线程时间与当前实例测量的总时间进行循环比较,两者比较,得出TCP是否超时。
方法:有两种:
第一种:适用于网络已经断开的情况。
namespace SalePro.Style
{
class IntConnectedState
{
[DllImport("wininet.dll", EntryPoint = "InternetGetConnectedState")]
//判断网络状况的方法,返回值true为连接,false为未连接
public extern static bool InternetGetConnectedState(out int conState, int reder);
public static bool GetConnect()
{
int n = 0;
if (InternetGetConnectedState(out n, 0))
{
// MessageBox.Show("yes");
return true;
}
else
{
MessageUtil.ShowTips("网络已断开,请查看网络是否连接!");
return false;
}
}
}
}
第二种:适用于网络不稳定,网络连接断断续续的情况。
namespace SalePro.Style
{
public static class SqlExtensions
{
public static bool QuickOpen(this SqlConnection conn)
{
int timeout = 3100;
Stopwatch sw = new Stopwatch();
bool connectSuccess = false;
Thread t = new Thread(delegate ()
{
try
{
sw.Start();
conn.Open();
connectSuccess = true;
}
catch { }
});
t.IsBackground = true;
t.Start();
while (timeout > sw.ElapsedMilliseconds)
if (t.Join(1))
break;
if (!connectSuccess)
{
MessageDxUtil.ShowWarning("无法连接服务器,请查看网络连接是否通畅!");
//conn.Close();
return false;
}
conn.Close();
return true;
}
}
}
解: 2.SqlConnection.Open超时:通过App.config数据库连接属性进行修改。
方法:(增加:Connect Timeout=30)