检查SQL连接是打开还是关闭

99 c# ado.net sqlconnection

你如何检查我使用的是打开还是关闭

 if (SQLOperator.SQLCONNECTION.State.Equals("Open"))
Run Code Online (Sandbox Code Playgroud)

然而,即使是国家"开放",它也没有通过这项检查.

小智 161

您应该使用SqlConnection.State

例如,

using System.Data;

if (myConnection != null && myConnection.State == ConnectionState.Closed)
{
   // do something
   // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 应该在答案中添加`使用System.Data;`,恕我直言.我忘记了这个命名空间(使用了System.Data.SqlClient`)并且在我添加它之前无法弄清楚如何将`ConnectionState`作为关键字.希望这有助于某人. (3认同)
  • 精确+1 - 使用`SqlConnectionState`枚举作为枚举而不是将其变成字符串..... (2认同)

the*_*mbo 50

这是我正在使用的:

if (mySQLConnection.State != ConnectionState.Open)
{
    mySQLConnection.Close();
    mySQLConnection.Open();
}
Run Code Online (Sandbox Code Playgroud)

我不是简单地使用的原因:

if (mySQLConnection.State == ConnectionState.Closed)
{
    mySQLConnection.Open();
}
Run Code Online (Sandbox Code Playgroud)

是因为ConnectionState也可以是:

Broken, Connnecting, Executing, Fetching
Run Code Online (Sandbox Code Playgroud)

此外

Open, Closed
Run Code Online (Sandbox Code Playgroud)

此外,微软声称关闭,然后重新打开连接"将刷新State的价值".请参阅http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.state(v=vs.110).aspx


csn*_*910 21

.NET文档说:State属性:ConnectionState值的按位组合

所以我认为你应该检查一下

!myConnection.State.HasFlag(ConnectionState.Open)
Run Code Online (Sandbox Code Playgroud)

代替

myConnection.State != ConnectionState.Open
Run Code Online (Sandbox Code Playgroud)

因为State可以有多个标志.

  • 打开一个问题http://stackoverflow.com/questions/35483542/net-state-of-db-connection (3认同)
  • 注意:我觉得有必要提一下,Ivan的链接提到你不应该把它用作旗帜.请参阅此具体答案:/sf/answers/2483947581/ (3认同)

Lou*_*caj 8

检查MySQL连接是否已打开

ConnectionState state = connection.State;
if (state == ConnectionState.Open)
{
    return true;
}
else
{
    connection.Open();
    return true;
}
Run Code Online (Sandbox Code Playgroud)


小智 6

你也可以用它

if (SQLCON.State == ConnectionState.Closed)
{
     SQLCON.Open();
}
Run Code Online (Sandbox Code Playgroud)


GBG*_*OLC 5

这段代码更具防御性,请在打开连接之前检查状态。如果连接状态为“断开”,则应尝试将其关闭。断开意味着该连接先前已打开并且无法正常运行。第二个条件确定必须再次关闭连接状态才能尝试再次打开它,以便可以重复调用该代码。

// Defensive database opening logic.

if (_databaseConnection.State == ConnectionState.Broken) {
    _databaseConnection.Close();
}

if (_databaseConnection.State == ConnectionState.Closed) {
    _databaseConnection.Open();
}
Run Code Online (Sandbox Code Playgroud)