我的一个程序,需要在一个实时系统与SQL Server之间保持连接,将实时系统产生的数据写入到数据库中做历史数据。程序一启动,就需要一直保持与数据库的连接,如果中间因为网络或者系统维护,或者是数据插入异常等原因,程序与数据库的连接可能断开。这时候就需要检测网络以及和数据库之间的连接是否还有效?
如果连接已经断开,则需要有这么一个机制:尝试重新连接上数据库,直至连接成功。请教各位,如何实现?
最好有代码...

解决方案 »

  1.   

    链接      
     public void getCon()
           {
               if (con == null)
               {
                   con = new SqlConnection();
               }
               con.ConnectionString = this.strConn;
               try
               {
                   con.Open();
                   conState = true;
                   if (cmd == null)
                   {
                       cmd = new SqlCommand();
                   }
                   cmd.Connection = con;
               }
               catch (SqlException ex)
               {
                   closeDb();
                   throw ex;
               }
           }
    关闭
           public void closeDb()
           {
               con.Close();
               cmd.Dispose();
               con.Dispose();
               conState = false;
           }
    更新
           public bool update(string sql)
           {
               if (!conState)
               {
                   getCon();
               }
               cmd.CommandType = CommandType.Text;
               cmd.CommandText = sql;
               try
               {
                   if (cmd.ExecuteNonQuery() > 0)
                       return true;
                   else return false;
               }
               catch (SqlException ex)
               {
                   closeDb();
                   throw ex;
               }
           }
    在业务逻辑中,例如:update更新错误,一旦发生异常,就从新链接getCon()
      

  2.   

    以前一直困扰我的一个问题,如何判断数据库连接是否成功(比如sql没有启动,数据库不存在等),实现友好的错误处理,但vbscript的错误处理机制实在太差,只有on error resume nex/go to,但往往使用ADO的错误陷阱后,等待你的将是脚本超时,这个函数将改变这一状况(连接超时长短可以自己根据实际情况控制)'入口参数:连接字符串strconn
    '返回值:TestConnection=true,falseFunction TestConnection(strconn)
    On Error Resume Next
    set conn=server.createobject("adodb.connection")
    '这里设定连接超时为10秒
    conn.ConnectionTimeout=10
    conn.Open strconn
    If conn.Errors.Count = 0 Then
    TestConnection = True
    conn.close
    Else
    TestConnection = False
    End If
    set conn=nothing
    End Function
      

  3.   

    楼主,你只要操作数据库,通过返回值判断是否出现异常,异常,不单单是连接断开,还包括系统死锁等导致的数据库异常!!!private bool do()
    {SqlConnection con = new SqlConnection(); try
    {
    con.Open();
    //执行数据库的操作
    ......//操作成功,返回TRUE值
    return true;
    }catch
    {
    .....
    //操作发生异常,返回FALSE值
    return false
    }}
    //调用do方法时,判断是否返回真,若不是,重新执行:while(do()==false){
    Console.WriteLine("发生异常");
    }
    Console.WriteLine("成功");
    上面代码手写的,楼主可按思路,自己动手一试