Проверьте, открыто ли соединение SQL или закрыто

Как проверить, открыт ли он или нет, я использовал

 if (SQLOperator.SQLCONNECTION.State.Equals("Open"))

Однако даже в состоянии «Открыто» он не проходит эту проверку.

87 голосов | спросил user222427 4 PM00000070000001431 2011, 19:13:14

7 ответов


0

Вы должны использовать SqlConnection.State

например,

using System.Data;

if (myConnection != null && myConnection.State == ConnectionState.Closed)
{
   // do something
   // ...
}
ответил 4 PM00000070000003231 2011, 19:15:32
0

Вот что я использую:

if (mySQLConnection.State != ConnectionState.Open)
{
    mySQLConnection.Close();
    mySQLConnection.Open();
}

Причина, по которой я не просто использую:

if (mySQLConnection.State == ConnectionState.Closed)
{
    mySQLConnection.Open();
}

Это потому, что ConnectionState также может быть:

Broken, Connnecting, Executing, Fetching

В дополнение к

Open, Closed

Кроме того, Microsoft заявляет, что Закрытие, а затем повторное открытие соединения «обновит значение State». Смотрите здесь http : //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.state (v = vs.110) .aspx

ответил therealjumbo 28 MarpmFri, 28 Mar 2014 23:10:13 +04002014-03-28T23:10:13+04:0011 2014, 23:10:13
0

Документация .NET гласит: Свойство состояния: побитовая комбинация значений ConnectionState

Так что я думаю, что вы должны проверить

!myConnection.State.HasFlag(ConnectionState.Open)

вместо

myConnection.State != ConnectionState.Open

потому что у State может быть несколько флагов.

ответил csname1910 18 FriEurope/Moscow2015-12-18T17:19:07+03:00Europe/Moscow12bEurope/MoscowFri, 18 Dec 2015 17:19:07 +0300 2015, 17:19:07
0

вы также можете использовать это

if (SQLCON.State == ConnectionState.Closed)
{
     SQLCON.Open();
}
ответил bitu pascal 2 52012vEurope/Moscow11bEurope/MoscowFri, 02 Nov 2012 11:25:44 +0400 2012, 11:25:44
0

Этот код немного более защищен, прежде чем открывать соединение, проверьте состояние. Если состояние соединения нарушено, мы должны попытаться закрыть его. Разрыв означает, что ранее соединение было открыто и не функционировало правильно. Второе условие определяет, что состояние соединения должно быть закрыто, прежде чем пытаться открыть его снова, чтобы код мог вызываться повторно.

// Defensive database opening logic.

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

if (_databaseConnection.State == ConnectionState.Closed) {
    _databaseConnection.Open();
}
ответил GBGOLC 8 J0000006Europe/Moscow 2017, 20:50:23
0

Чтобы проверить состояние соединения с базой данных, вы можете просто сделать следующее

if(con.State == ConnectionState.Open){}
ответил ImranNaqvi 27 AM00000080000005231 2015, 08:19:52
0

Чтобы проверить состояние OleDbConnection, используйте это:

if (oconn.State == ConnectionState.Open)
{
    oconn.Close();
}

State вернуть ConnectionState

public override ConnectionState State { get; }

Вот другие ConnectionState enum

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
    }
ответил Manjunath Bilwar 7 AM00000010000005631 2018, 01:35:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132