我的一个程序,需要在一个实时系统与SQL Server之间保持连接,将实时系统产生的数据写入到数据库中做历史数据。程序一启动,就需要一直保持与数据库的连接,如果中间因为网络或者系统维护,或者是数据插入异常等原因,程序与数据库的连接可能断开。这时候就需要检测网络以及和数据库之间的连接是否还有效?
如果连接已经断开,则需要有这么一个机制:尝试重新连接上数据库,直至连接成功。请教各位,如何实现?
最好有代码...
如果连接已经断开,则需要有这么一个机制:尝试重新连接上数据库,直至连接成功。请教各位,如何实现?
最好有代码...
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()
'返回值: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
{SqlConnection con = new SqlConnection(); try
{
con.Open();
//执行数据库的操作
......//操作成功,返回TRUE值
return true;
}catch
{
.....
//操作发生异常,返回FALSE值
return false
}}
//调用do方法时,判断是否返回真,若不是,重新执行:while(do()==false){
Console.WriteLine("发生异常");
}
Console.WriteLine("成功");
上面代码手写的,楼主可按思路,自己动手一试