回答:
SqlConnection.Stateを使用する必要があります
例えば、
using System.Data;
if (myConnection != null && myConnection.State == ConnectionState.Closed)
{
// do something
// ...
}
using System.Data;
答えに追加すべきだった、IMHO。私はこの名前空間を忘れていて(持っていましたusing System.Data.SqlClient
)、ConnectionState
追加するまでキーワードとして取得する方法を理解できませんでした。これが誰かを助けることを願っています。
if (myConnection == null || myConnection.State == ConnectionState.Closed) { //Connection is closed } else { //Connection is open in some way }
?このようにして、接続がnullの場合も「クローズ」されます。
これが私が使っているものです:
if (mySQLConnection.State != ConnectionState.Open)
{
mySQLConnection.Close();
mySQLConnection.Open();
}
私が単に使用していない理由:
if (mySQLConnection.State == ConnectionState.Closed)
{
mySQLConnection.Open();
}
これは、ConnectionStateも次のようになるためです。
Broken, Connnecting, Executing, Fetching
に加えて
Open, Closed
さらに、Microsoftは、接続を閉じてから再度開くと、「状態の値が更新される」と述べています。こちらをご覧くださいhttp://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.state(v=vs.110).aspx
mySQLConnection.State != ConnectionState.Open && mySQLConnection.State != ConnectionState.Connecting
遅い接続でのリセットを避けるためにテストすべきですよね?
.NETドキュメントは言う:状態プロパティ:ConnectionState値のビットごとの組み合わせ
だからチェックすべきだと思います
!myConnection.State.HasFlag(ConnectionState.Open)
の代わりに
myConnection.State != ConnectionState.Open
なぜなら、Stateは複数のフラグを持つことができるからです。
MySQL接続が開いているかどうかを確認する
ConnectionState state = connection.State;
if (state == ConnectionState.Open)
{
return true;
}
else
{
connection.Open();
return true;
}
return true;
ですか?メソッドの最後のif
/の外に置きelse
ます!
これも使えます
if (SQLCON.State == ConnectionState.Closed)
{
SQLCON.Open();
}
using System.Data;
知らなかった、またはなぜうまくいかなかったのか
このコードはもう少し防御的です。接続を開く前に状態を確認してください。接続状態がBrokenの場合は、閉じようとする必要があります。壊れているとは、接続が以前に開かれていて、正しく機能していないことを意味します。2番目の条件は、コードを繰り返し呼び出すことができるように、接続状態を再度開く前に閉じる必要があることを決定します。
// Defensive database opening logic.
if (_databaseConnection.State == ConnectionState.Broken) {
_databaseConnection.Close();
}
if (_databaseConnection.State == ConnectionState.Closed) {
_databaseConnection.Open();
}
OleDbConnectionの状態を確認するには、次を使用します。
if (oconn.State == ConnectionState.Open)
{
oconn.Close();
}
State
を返す ConnectionState
public override ConnectionState State { get; }
ここに他のConnectionState
列挙型があります
public enum ConnectionState
{
//
// Summary:
// The connection is closed.
Closed = 0,
//
// Summary:
// The connection is open.
Open = 1,
//
// Summary:
// The connection object is connecting to the data source. (This value is reserved
// for future versions of the product.)
Connecting = 2,
//
// Summary:
// The connection object is executing a command. (This value is reserved for future
// versions of the product.)
Executing = 4,
//
// Summary:
// The connection object is retrieving data. (This value is reserved for future
// versions of the product.)
Fetching = 8,
//
// Summary:
// The connection to the data source is broken. This can occur only after the connection
// has been opened. A connection in this state may be closed and then re-opened.
// (This value is reserved for future versions of the product.)
Broken = 16
}
SqlConnectionState
enumをenumとして使用し、それを文字列に変換しないでください.....