如何判断Sqlconnection是超时状态呢??

xonln 2012-02-10 04:57:19
当物理连接断开后(比如服务器重启,或网络断开),连接池中的连接仍然有效,此时从连接池获取的连接仍然是正常的,也就是说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是超时状态呢??
...全文
356 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nonocast 2012-02-10
  • 打赏
  • 举报
回复
SqlConnection是一个轻量级对象(Light Object),使用时建议每次new,每次Open,不要一个对象从头用到底,系统会维持连接对象池,其次你可以在Thread中去取数据,采用异步的方式避免UI挂起,然后通过Try..Catch,捕捉SqlConnection在连接失败时产生的异常信息。

May it helps.
stonespace 2012-02-10
  • 打赏
  • 举报
回复
系统也不能及时知道网络连接已经断开,物理断开的时候,系统不能每秒都检测是否还存在网络连接,所以肯定会有一个延迟,

等一个操作因为网络连接失败而失败后,m_sqlCon.State == System.Data.ConnectionState.Closed才会true,连接池中的连接仍然会认为有效,

所以用异常处理才是最可靠的方法,没有进行sql操作之前很难准确判断连接的状态,
tanghuawei 2012-02-10
  • 打赏
  • 举报
回复
貌似没有超时状态,当sql服务器连接不上时,会有几十秒的等待时间
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在.NET开发中,使用SqlConnection连接SQL Server时,常常会发现第一次建立连接耗时较长,而后续连接则相对迅速。这种现象其实与SqlConnection的连接池机制密切相关。深入理解SqlConnection的连接池机制,能够帮助我们更好地编写高效且性能优良的数据库应用程序。 当应用程序首次通过SqlConnection连接到SQL Server时,.NET框架会创建一个新的物理连接,并将其加入到连接池中。这个过程包括建立网络连接、进行身份验证以及初始化数据库会话等一系列操作,因此耗时相对较长。然而,一旦连接建立并放入连接池后,后续的连接请求就可以直接从连接池中获取已有的连接,而无需重复上述耗时的初始化过程,从而大大提高了连接效率。 连接池机制的核心在于它能够复用已有的连接,避免频繁地创建和销毁连接所带来的性能开销。.NET框架会根据应用程序的配置和运行时的需求,自动管理连接池中的连接数量。例如,当连接池中的连接数量达到上限时,新的连接请求会被排队等待,直到有连接被释放并返回到连接池中。而当连接池中的连接长时间未被使用时,框架会自动清理这些闲置的连接,以释放系统资源。 正确理解和利用SqlConnection的连接池机制,可以在开发数据库应用程序时带来诸多好处。例如,合理配置连接池的大小和超时时间,可以优化应用程序的性能表现,尤其是在高并发的场景下。同时,避免在代码中频繁地关闭和重新打开连接,而是充分利用连接池中的现有连接,可以进一步减少连接建立和释放的开销,提高应用程序的响应速度和吞吐量。 总之,SqlConnection的连接池机制是.NET框架中用于优化数据库连接性能的重要特性。通过深入了解这一机制,开发者可以更加高效地管理数据库连接,从而编写出性能更优的数据

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧