我有这段代码:
if ( con.SqlConnection.State == System.Data.ConnectionState.Broken ||
con.SqlConnection.State == System.Data.ConnectionState.Closed
){
con.SqlConnection.Open();
}
我失去了与网络的连接。当我来到我的if
时,我的SqlConnection.State
仍然打开。
如何刷新SqlConnection
答案 0 :(得分:4)
这是 依赖异常的少数情况之一。
Microsoft实际上建议您对异常做出反应,而不是检查该状态变量。想想你检查变量的情况,然后在一个纳秒后连接断开。
我相信会被抛出的两个是InvalidOperationException
或SqlException
。
答案 1 :(得分:3)
在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;
}
答案 2 :(得分:2)
您始终可以使用SqlConnection.StateChange Event
监控SqlConnection
的状态
答案 3 :(得分:1)
懒惰的方式:“ 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.
}
}