打开服务器连接之前 判断 sqlconnection的连接状态不就可以了。

解决方案 »

  1.   

    有判断,我写在了CheckConnection里面。
    可是总感觉那个连接状态并不那么好用。而且,cn.State 应该只是显示当前状态,就算我服务器没有连上,它也只是出入closed的状态,没有说明是能打开的
      

  2.   

    再补充一下,本来是想写在 catch里面的, 但是,就算在catch里面,cn.Open() 还是会卡死整个程序,约等10-20秒左右才能catch到,而且听说当遇到异常的时候,catch是消耗大量系统资源?
      

  3.   

    你可以类似这样写代码:private static OracleConnection CreateConnection()
    {
        OracleConnection res=null;
        var eh = new ManualResetEvent(false);
        ThreadPool.QueueUserWorkItem(h =>
        {
            var conn = new OracleConnection(cnStr1);
            conn.Open();
            res = conn;
            eh.Set();
        });
        ThreadPool.QueueUserWorkItem(h =>
        {
            var conn = new OracleConnection(cnStr2);
            conn.Open();
            res = conn;
            eh.Set();
        });
        eh.WaitOne();
        return res;
    }