如何刷新SqlConnection的状态
本文关键字:SqlConnection 状态 刷新 何刷新 | 更新日期: 2023-09-27 18:00:44
我有这个代码:
if ( con.SqlConnection.State == System.Data.ConnectionState.Broken ||
con.SqlConnection.State == System.Data.ConnectionState.Closed
){
con.SqlConnection.Open();
}
我失去了与网络的连接。当我来到我的if
时,我的SqlConnection.State
仍然说打开。
如何刷新SqlConnection
的状态
这是您应该依赖异常的少数情况之一。
Microsoft实际上建议您对异常做出反应,而不是检查状态变量。想象一下这样的情况:检查变量,然后在一纳秒后连接断开。
我相信会被抛出的两个是InvalidOperationException
或SqlException
。
在TCP连接上,只有一种方法可以保证了解连接是否仍然有效,那就是向打开的套接字发送新的数据包。
因此,只要我们假设您通过TCP连接连接到Sql Server,此规则也适用于它。因此,如果出现异常,您需要发送数据并等待。
public bool IsConnected()
{
if (db == null) //db here is an Entity
return false;
//in my case Connection is an sqlconnection object so you can
//apply the same to your connection
if (db.Database.Connection.State == ConnectionState.Closed)
return false;
try
{
var cmd = db.Database.Connection.CreateCommand();
cmd.CommandText = "SELECT 0";
cmd.ExecuteNonQuery();
}
catch
{
return false;
}
return true;
}
您可以始终使用SqlConnection.StateChange Event 来监控SqlConnection
的状态
懒惰的方式:"SELECT 0"。如果命令失败,连接状态将更新为"关闭"
if (DBConn.State == ConnectionState.Open)
{
try
{
using(SqlCommand cmd = new SqlCommand(DBConn))
{
cmd.CommandText = "SELECT 0";
cmd.ExecuteNonQuery();
}
}
Catch
{
DBConn.Close(); ''Declare the connection dead.
}
}