C#连接Oracle 19C数据库问题

问题:当我查询数据库的时候,连接数据库会提示超时,能不能用一个循环去连接数据库,如果连接成功就跳出循环,执行数据库查询工作

 我写了一段 麻烦大神们看看行不行,我是个菜鸟

 /// <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