在登录的时候,点击登录触发btnLogin_Click事件
private void btnLogin_Click(object sender, EventArgs e)
{
   //验证那些的就不写了  btnLogin.Enabled=false;  try
  {
       //这里连接数据库,查询用户有效性
  }
   catch (InvalidOperationException ex)
  { 
      MessageBox.Show("连接服务器失败!");
  }
  catch(Exception ex)
  {
      MessageBox.Show("123456");
  }
  finally
  {  
      btnLogin.Enabled=true;
   }}
当我运行程序,第一次点登录按钮时,超时时间到了后,会弹出“连接服务器失败",在不关闭窗体的情况下,再次单击登录按钮,就弹出123456,以后再点击登录按钮(不重新运行程序),都只弹出123456。我在第三次(即弹出123456后)开启了SQL Server服务后再点击登录,仍然弹出123456为什么?

解决方案 »

  1.   

    不同的情况throw不同的Exception
    ctach的时候判断一下
    对应的Exception弹出不同的消息
      

  2.   

    直接把Exception的Message输出看看不就知道是抛了什么异常么
      

  3.   

    InvalidOperationException 是当方法调用对于对象的当前状态无效时引发的异常,而且只有调用方法失败不是由无效参数造成的,才会引发InvalidOperationException.
      

  4.   

     catch(Exception ex)
      {
          MessageBox.Show(ex.Message);
      }
      

  5.   

    看了楼主帖子,楼主是不是先关闭了SQL服务器,点击BUTTON,测试下到底 throw抛出哪个Exception,继续按照你的意思,是到第三次你才开启SQL服务器,在测试了抛出是哪个异常是不,不知道自己理解的对不? 
      

  6.   

    首先谢谢各位的回答,我在把问题详细描述一下SQL Server现在是本地的,我手动关闭了,因为数据库将来是要布署到远程服务器上的。你无法预料什么时候机房的网络出问题或者是远程服务器要重启的情况。如果刚好在这个时候客户端在本地要连接到服务器怎么办?所以我要捕捉到这个异常(其实这个不能叫异常)
     string connString="SQL SERVER连接字符串";
     SqlConnection connection = new SqlConnection(connString) ;
     connection.Open();    //如果无法连接到数据库(超时)了,那么在此行出错,它的异常就是InvalidOperationException
    好的,现在我点击了登录按钮(btnLogin),触发了事件        
    private void btnLogin_Click(object sender, EventArgs e)
            {
                if (验证呀验证)
                {            }
                else
                {
                    //通过了验证                btnLogin.Enabled = false;       //禁用登录按钮,避免重复点击                
                    string connString = "SQL SERVER连接字符串";
                    SqlConnection connection = new SqlConnection(connString);
                    try
                    {
                        connection.Open();
                    }
                    catch (InvalidOperationException ex)
                    {
                        //超时时间到了后,15S的样子,弹出                    //错误:"在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。
                        //(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) "
                        MessageBox.Show(ex.Message);
                        return;
                    }
                    finally
                    {
                        btnLogin.Enabled = true;
                    }
                }
            }
    现在的问题是这样的:运行程序,我第一次单击登录,15秒后弹出错误,然后登录按钮可用。
    我把本地的SQL Server服务打开,照理说我这时候连接数据库应该是可以的了(排除用户名密码错误等因素)
    我再点击登录按钮,照理来说应该是又重新进入btnLogin_Click事件,又重新进行验证,连接等操作,但为什么第二次单击的时候仍然会弹出错误提示?(就是又进入 到catch去了)
      

  7.   

    sql server外围应用配置器,服务和连接的外围应用配置器,打开MSSQLSERVER节点下的Database Engine 节点,先择"远程连接",接下建议选择"同时使用TCP/IP和named pipes",确定后,重启数据库服务就可以了.
    如果还出现错误的话 那么检查一下代码连接字符串