问题:当我查询数据库的时候,连接数据库会提示超时,能不能用一个循环去连接数据库,如果连接成功就跳出循环,执行数据库查询工作
我写了一段 麻烦大神们看看行不行,我是个菜鸟
/// <summary>
/// 执行SQL语句并返回记录集
/// </summary>
/// <param name="cmdStr">标准的SQL语句</param>
/// <returns></returns>
public static DataTable GetDataTable(string cmdStr)
{
using (OracleConnection _connection = new OracleConnection(GetConnectionstring()))
{
DataTable dt = new DataTable();
try
{
_connection.Open();
while (_connection.State!=ConnectionState.Open)//循环连接数据库
{
_connection.Open();
}
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = new OracleCommand(cmdStr, _connection);
da.Fill(dt);
}
catch (Exception exs)
{
//ClassLib.Error.RedirectError(exs.Message.ToString(), "", "");
throw new Exception(exs.Message.ToString());
}
finally { _connection.Close();_connection.Dispose(); }
return dt;
}
}
应该是不行的,如果连接超时会抛异常!
连接数据库会肯定不能用循环去连接,说明你这个网络有问题吧。
你这么做法会让线程处于死循环的,如果是主线程,那整个程序都堵住了。
如果连不上,你这么无间断的重连本身意义也不到,即使想要多次尝试连接,那么也应该用个定时器之类的
一定要弄的话改成下面这样,不过最好是检查下什么问题导致的。。
/// <summary>
/// 执行SQL语句并返回记录集
/// </summary>
/// <param name="cmdStr">标准的SQL语句</param>
/// <returns></returns>
public static DataTable GetDataTable(string cmdStr)
{
using (OracleConnection _connection = new OracleConnection(GetConnectionstring()))
{
DataTable dt = new DataTable();
try
{
while (_connection.State != ConnectionState.Open)//循环连接数据库
{
try
{
_connection.Open();
}
catch
{
System.Threading.Thread.Sleep(100);//100ms后再尝试打开
}
}
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = new OracleCommand(cmdStr, _connection);
da.Fill(dt);
}
catch (Exception exs)
{
//ClassLib.Error.RedirectError(exs.Message.ToString(), "", "");
throw new Exception(exs.Message.ToString());
}
finally { _connection.Close(); _connection.Dispose(); }
return dt;
}
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y