Come si controlla se è aperto o chiuso che stavo usando
if (SQLOperator.SQLCONNECTION.State.Equals("Open"))
tuttavia, anche se lo Stato è "Aperto", questo controllo fallisce.
Come si controlla se è aperto o chiuso che stavo usando
if (SQLOperator.SQLCONNECTION.State.Equals("Open"))
tuttavia, anche se lo Stato è "Aperto", questo controllo fallisce.
Risposte:
Dovresti usare SqlConnection.State
per esempio,
using System.Data;
if (myConnection != null && myConnection.State == ConnectionState.Closed)
{
// do something
// ...
}
using System.Data;
nella risposta, IMHO. Ho dimenticato questo spazio dei nomi (aveva using System.Data.SqlClient
) e non riuscivo a capire come ottenere ConnectionState
come parola chiave finché non l'ho aggiunto. Spero che questo aiuti qualcuno.
if (myConnection == null || myConnection.State == ConnectionState.Closed) { //Connection is closed } else { //Connection is open in some way }
? In questo modo se la connessione è nulla viene anche "chiusa".
Ecco cosa sto usando:
if (mySQLConnection.State != ConnectionState.Open)
{
mySQLConnection.Close();
mySQLConnection.Open();
}
Il motivo per cui non sto semplicemente usando:
if (mySQLConnection.State == ConnectionState.Closed)
{
mySQLConnection.Open();
}
È perché ConnectionState può anche essere:
Broken, Connnecting, Executing, Fetching
Inoltre
Open, Closed
Inoltre, Microsoft afferma che la chiusura e quindi la riapertura della connessione "aggiornerà il valore dello stato". Vedi qui http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.state(v=vs.110).aspx
mySQLConnection.State != ConnectionState.Open && mySQLConnection.State != ConnectionState.Connecting
per evitare ripristini con connessioni lente, non è vero?
La documentazione .NET dice: Proprietà State: una combinazione bit per bit dei valori ConnectionState
Quindi penso che dovresti controllare
!myConnection.State.HasFlag(ConnectionState.Open)
invece di
myConnection.State != ConnectionState.Open
perché lo stato può avere più flag.
Controlla se è aperta una connessione MySQL
ConnectionState state = connection.State;
if (state == ConnectionState.Open)
{
return true;
}
else
{
connection.Open();
return true;
}
return true;
? mettilo alla fine del metodo, fuori da if
/ else
!
puoi anche usare questo
if (SQLCON.State == ConnectionState.Closed)
{
SQLCON.Open();
}
using System.Data;
per chiunque non lo sapesse o non sapesse perché non funzionava
Questo codice è un po 'più difensivo, prima di aprire una connessione, controlla lo stato. Se lo stato della connessione è interrotto, dovremmo provare a chiuderlo. Interrotto significa che la connessione è stata precedentemente aperta e non funziona correttamente. La seconda condizione determina che lo stato di connessione deve essere chiuso prima di tentare di aprirlo di nuovo in modo che il codice possa essere chiamato ripetutamente.
// Defensive database opening logic.
if (_databaseConnection.State == ConnectionState.Broken) {
_databaseConnection.Close();
}
if (_databaseConnection.State == ConnectionState.Closed) {
_databaseConnection.Open();
}
Per controllare lo stato di connessione del database puoi semplicemente fare quanto segue
if(con.State == ConnectionState.Open){}
Per controllare lo stato di OleDbConnection usa questo:
if (oconn.State == ConnectionState.Open)
{
oconn.Close();
}
State
restituire il file ConnectionState
public override ConnectionState State { get; }
Ecco le altre ConnectionState
enumerazioni
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
}
Uso il modo seguente sqlconnection.state
if(conexion.state != connectionState.open())
conexion.open();
connectionState.open()
non esiste; intendevi ConnectionState.Open
?
SqlConnectionState
enum come enum e non trasformarlo in una stringa .....