如何判断Sqlconnection是超时状态呢??
当物理连接断开后(比如服务器重启,或网络断开),连接池中的连接仍然有效,此时从连接池获取的连接仍然是正常的,也就是说connection.open仍然正常,不会有任何错误,但在实际执行命令时就会报错,连接池中的连接才会被移除。
但是这样显然会给客户造成不好的体验,因为当前执行不能成功。
对于这种情况,一个方法是在执行命令的时候捕获异常,自动重新执行命令。但是这样的问题是写起来太啰嗦,我希望能够在执行命令之前,比如open的时候就自动重连,这样可以统一处理连接。
代码示意:
bool Open(string database)
{
SqlConnection m_sqlCon = SqlCon;//默认是从连接池取的连接
try
{
if (m_sqlCon.State == System.Data.ConnectionState.Closed)
m_sqlCon.Open(); //就连接已经断开,这里也仍然是成功的。
else if (m_sqlCon.State == ConnectionState.Broken) //这里也并不能判断
{
m_sqlCon.Close();//close也只是放回连接池,所以这里就算能执行到也没有意义
m_sqlCon.Open();
}
}
catch (Exception ex)
{
Dispose();
throw (ex);
}
return true;
}
public int ExecuteSql(String sqlStr)
{
if (false == Open()) return -1;
SqlCommand cmd = new SqlCommand(sqlStr, m_sqlCon);
return cmd.ExecuteNonQuery(); //这里才会错误
}
以上是物理断开产生的错误?
另如何判断Sqlconnection是超时状态呢??
但是这样显然会给客户造成不好的体验,因为当前执行不能成功。
对于这种情况,一个方法是在执行命令的时候捕获异常,自动重新执行命令。但是这样的问题是写起来太啰嗦,我希望能够在执行命令之前,比如open的时候就自动重连,这样可以统一处理连接。
代码示意:
bool Open(string database)
{
SqlConnection m_sqlCon = SqlCon;//默认是从连接池取的连接
try
{
if (m_sqlCon.State == System.Data.ConnectionState.Closed)
m_sqlCon.Open(); //就连接已经断开,这里也仍然是成功的。
else if (m_sqlCon.State == ConnectionState.Broken) //这里也并不能判断
{
m_sqlCon.Close();//close也只是放回连接池,所以这里就算能执行到也没有意义
m_sqlCon.Open();
}
}
catch (Exception ex)
{
Dispose();
throw (ex);
}
return true;
}
public int ExecuteSql(String sqlStr)
{
if (false == Open()) return -1;
SqlCommand cmd = new SqlCommand(sqlStr, m_sqlCon);
return cmd.ExecuteNonQuery(); //这里才会错误
}
以上是物理断开产生的错误?
另如何判断Sqlconnection是超时状态呢??
...全文
相关推荐
C#使用SqlConnection连接到SQL Server的代码示例
主要介绍了C#使用SqlConnection连接到SQL Server的代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
.net 中的SqlConnection连接池机制详解
.net 中通过 SqlConnection 连接 sql server,我们会发现第一次连接时总是很耗时,但后面连接就很快,这个其实和SqlConnection 的连接池机制有关
sqlconnection
通用的数据库(sqlite/mysql/postgresql)链接库,使用c++14封装数据库的底层接口,提供统一的c++调用方式,更为少量的代码、方便、灵活并且跨平台。
解析如何正确使用SqlConnection的实现方法
本篇文章对如何正确使用SqlConnection的实现方法进行了详细的分析介绍,需要的朋友参考下
sqlConnection对象
sqlConnection对象,教你如何学会sqlConnection的操作。。仅仅收1分,回复即可取回。。全部是自己手写的


