我的程序所在网络环境不好,经常长时间丢包.我使用ado.net如何实现自动重连?有没有例子

解决方案 »

  1.   

    你可以将打开数据库连接和读取数据的代码用try ....catch finally抱起来,在catch异常后,再次连接!
    try
    {
       sqlConn.open();
       
       while(notEnd)//你要在循环中设置结束条件
       {
          try{
            //...read data from sqlConn
          }
          catch(Exception ex)
          {
             if(sqlConn.State!=ConnectionState.Open)
               sqlConn.Open();
          }
       }
    }
    catch(Exception ex)
    {
       //外围异常处理
    }
      

  2.   

    楼上的代码确实实现了重新连接  但是TRY中的代码就不执行了
    每次执行之前 先判断下状态 要是ConnectionState.Open 就直接执行操作 要不是 就连接后再去执行  
    使用连接池可以提高效率
      

  3.   

    using(SqlConnection conn=new SqlConnection(""))
    {
     if(sqlConn.State==ConnectionState.Closed)
     { 
       conn.Open();
     }
    ...
    }
      

  4.   

    没错,这是一个常见的问题,每个公司都可能会遇到,其实基本道理都是让它再连,也就是ADOConnection再次连一次就OK了,你可以放在异常中处理,也可以在任何你认为可能会断开的地方调用,不过有一点,Oracle数据库本身就有一个保持Session时间段的问题。所以你要经常保持这个Session在活动
      

  5.   

    .net本身框架内所有ado.net的驱动的DbConnection都只是逻辑连接而已,没每一次数据库操作都要使用Open,这样逻辑连接就会复用底层物理连接,或者创建新的物理连接。因此这些根本不是你的编程所能看到的,你只是看到一个操作过程中抛出异常了(于是事务没有提交),然后用户再次执行操作又成功了。这个时候你要做的只是重新设计业务逻辑使得每一个数据库操作事务都很短(例如不超过2秒钟),你有怎么可能会仅仅纠缠于刚刚最初的一步“自动重连”?(难道你就不考虑重连以后做什么?)不问这种问题,反而会编程。一旦多余考虑这些,反而不会了。
      

  6.   

    某mm,一段时间QQ离开的自动回复非常简洁——“不在!” 
      于是出现了这样的聊天记录: 
      ——在吗? 
      ——不在! 
      ——真不在? 
      ——不在! 
      ——问你件事情哦,你的初吻还在吗? 
      ——不在! 
      ——啊?那你的初夜还在吧? 
      ——不在! 
      ——你的贞操还在吗? 
      ——不在! 
      ——喂,你太过分了,你的廉耻心还在吗? 
      ——不在! 
      …………………… 
      mm遂改自动回复… 
      

  7.   

    据说这是微软推出的代替try...catch...finally的方法。效率应该比try...catch...finally效率高。