Как проверить, открыт он или закрыт? Я использовал
if (SQLOperator.SQLCONNECTION.State.Equals("Open"))
однако, даже если состояние «открыто», оно не проходит эту проверку.
Как проверить, открыт он или закрыт? Я использовал
if (SQLOperator.SQLCONNECTION.State.Equals("Open"))
однако, даже если состояние «открыто», оно не проходит эту проверку.
Ответы:
Вы должны использовать SqlConnection.State
например,
using System.Data;
if (myConnection != null && myConnection.State == ConnectionState.Closed)
{
// do something
// ...
}
using System.Data;
в ответ, ИМХО. Я забыл это пространство имен (было using System.Data.SqlClient
) и не мог понять, как получить ConnectionState
в качестве ключевого слова, пока не добавил его. Надеюсь, это кому-то поможет.
if (myConnection == null || myConnection.State == ConnectionState.Closed) { //Connection is closed } else { //Connection is open in some way }
? Таким образом, если соединение нулевое, оно также «закрыто».
Вот что я использую:
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 говорится: State Property: побитовая комбинация значений ConnectionState.
Я думаю, тебе стоит проверить
!myConnection.State.HasFlag(ConnectionState.Open)
вместо того
myConnection.State != ConnectionState.Open
потому что состояние может иметь несколько флагов.
Проверьте, открыто ли соединение 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;
для тех, кто не знал или не знал, почему это не работает
Этот код является немного более защитным, прежде чем открывать соединение, проверьте состояние. Если состояние соединения разорвано, мы должны попытаться закрыть его. Разорванный означает, что соединение ранее было открыто и работает некорректно. Второе условие определяет, что состояние соединения должно быть закрыто перед повторной попыткой его открытия, чтобы код можно было вызывать повторно.
// Defensive database opening logic.
if (_databaseConnection.State == ConnectionState.Broken) {
_databaseConnection.Close();
}
if (_databaseConnection.State == ConnectionState.Closed) {
_databaseConnection.Open();
}
Чтобы проверить состояние подключения к базе данных, вы можете просто сделать следующее
if(con.State == ConnectionState.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
}
Я использую следующий способ sqlconnection.state
if(conexion.state != connectionState.open())
conexion.open();
connectionState.open()
не существует; ты имел ввиду ConnectionState.Open
?
SqlConnectionState
перечисление как перечисление, а не превращайте его в строку .....