解决Oledb连接超时需要等待15秒的办法

解决Oledb连接超时需要等待15秒的办法
Oledb在数据库未开情况下,需要等待15秒才会超时或报错,改什么超时时间都不起作用。
什么try catch之类的都是浮云.
即然数据库在正常情况下都是秒执行,那就从这个地方入手,能够正常返回来数据就表示正常,返不回来就有问题。
解决办法:利用异步超时原理,在指定时间内不返回直接判为超时,超时就证明连接有问题 。
1.首先建立超时类
#region 带超时异步执行
///
/// 带超时异步执行SQL
///
public class SqlInvoke
{
//信号量
private static AutoResetEvent autoEvent = new AutoResetEvent(false);
///
/// 检测方法 (超时返回True,未超时返回False)
///
/// 传入无参委托
/// 超时时长,默认3秒
///
public static bool Invoke(Action func, int ms = 3000)
{
CheckPar CheckPar = new CheckPar
{
Action = func,
AutoResetEvent = autoEvent
};
ThreadPool.QueueUserWorkItem(new WaitCallback(WorkMethod), CheckPar);
if (autoEvent.WaitOne(ms))
{
//Console.WriteLine(“收到信号”);
return false;
}
else
{
//Console.WriteLine(“超时”);
return true;
}
}
private static void WorkMethod(object obj)
{
CheckPar par = (CheckPar)obj;
par.Action.Invoke();//执行委托
par.AutoResetEvent.Set(); //信号终止
}
}
internal class CheckPar
{
public Action Action { get; set; }
public AutoResetEvent AutoResetEvent { get; set; }
}
#endregion
2.调用 (数据库正常情况下正常执行,不正常时则会返回超时)
DataSet ds = null;
//委托执行,返回false表示正常,返回true则超时
bool flag= SqlInvoke.Invoke(delegate
{
//你要执行的查询 (sql语句存储过程等)
ds = OleDbHelper.ExecuteDataSet(CommandType.Text, sqlcmd);
}
);

你可能感兴趣的:(数据库)