जाँच करें कि क्या SQL कनेक्शन खुला या बंद है


102

आप कैसे जांचते हैं कि यह खुला या बंद है जो मैं उपयोग कर रहा था

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

हालाँकि, यहां तक ​​कि राज्य 'खुला' है, यह इस चेक पर विफल रहता है।

जवाबों:


175

आपको उपयोग करना चाहिए SqlConnection.State

जैसे,

using System.Data;

if (myConnection != null && myConnection.State == ConnectionState.Closed)
{
   // do something
   // ...
}

2
+1 बिल्कुल - एक SqlConnectionStateएनम के रूप में एनम का उपयोग करें और इसे एक स्ट्रिंग में न
बदलें

4
using System.Data;जवाब में जोड़ा जाना चाहिए , IMHO। मैं इस नाम स्थान को भूल गया था (तब तक using System.Data.SqlClient) और यह पता नहीं लगा सका कि ConnectionStateजब तक मैंने इसे जोड़ा, तब तक एक कीवर्ड के रूप में कैसे प्राप्त किया जा सकता है। आशा है कि यह किसी की मदद करता है।
vapcguy

क्या यह काम करता है यदि सर्वर (या स्थानीय मशीन और सर्वर के बीच कुछ) ने कनेक्शन बंद कर दिया है?
jpmc26

यह कहना बेहतर नहीं होगा if (myConnection == null || myConnection.State == ConnectionState.Closed) { //Connection is closed } else { //Connection is open in some way }? इस तरह यदि कनेक्शन शून्य है तो यह "बंद" भी है।
अरवो बोवेन

52

यहाँ मैं उपयोग कर रहा हूँ:

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धीमी गति से कनेक्शन के साथ रीसेट से बचने के लिए परीक्षण करना चाहिए , तो क्या आपको नहीं करना चाहिए?
कैलिगारी

@caligari सच है, DbConnection के लिए कोई गारंटी नहीं है, इसलिए यदि DbConnection के लिए प्रोग्रामिंग की जाती है, तो सावधान रहें।
जॉन ज़ब्रोस्की 16

1
मुझे व्यक्तिगत रूप से लगता है कि यह इस तरह की समस्या है जिसे आप टालते हुए हल करते हैं। मैं शायद इस कोड स्निपेट के लिए उपयोग केस को स्टेटफुल एप्लिकेशन लेयर में देख सकता हूं, लेकिन वेब पर कभी नहीं?
जॉन ज़ब्रोस्की

जॉन, यह इस कोड के लिए उपयोग मामला है। एक सर्वर एप्लिकेशन चलाने वाला कोड जो पृष्ठों की सेवा कर सकता है, जो किसी अन्य REST सर्वर से कनेक्ट हो। मुझे ऐसा कोई मामला नहीं दिखाई देता जहाँ मैं किसी वेब अनुप्रयोग में क्लाइंट साइड कोड में सर्वर डेटाबेस से कनेक्ट होऊँ।
therealjumbo

स्थानीय भंडारण के साथ 1) एक विशालकाय कालिख है, जो अब एक चीज बन गई है, जल्दी या बाद में (पहले से?) वेब स्टोर जो स्थानीय भंडारण का उपयोग करते हैं, वे उस भंडारण में डेटाबेस का उपयोग करने जा रहे हैं। यदि अभी नहीं, तो वे शीघ्र ही करेंगे। यहाँ दूसरी बात यह है कि, मेरा कोड संभवतः एक बड़े अनुप्रयोग में उपयोग किए जाने के लिए ठीक से सामान्यीकृत नहीं है। मेरा मुख्य ध्यान एम्बेडेड प्रोग्रामिंग है, इसलिए मैं अभी भी सर्वर साइड पर सीख रहा हूं।
थेरेजुम्बो

24

.NET प्रलेखन कहता है: राज्य संपत्ति: ConnectionState मूल्यों का एक बिटवाइज़ संयोजन

इसलिए मुझे लगता है कि आपको जांच करनी चाहिए

!myConnection.State.HasFlag(ConnectionState.Open)

के बजाय

myConnection.State != ConnectionState.Open

क्योंकि राज्य में कई झंडे हो सकते हैं।


मुझे आश्चर्य है कि झंडे के साथ यह क्यों है। चूँकि इस एनम के क्लोज़ आइटम का मूल्य शून्य है, तो State.HasFlag (ConnectionState.Close) किसी भी मूल्य पर सही लौटेगा। मेरे लिए इसका मतलब है कि मुझे "! = बंद" के रूप में जांच करनी चाहिए
इवान


4
नोट: मुझे लगता है कि इवान लिंक का उल्लेख करना आवश्यक है कि आप झंडे के रूप में इसका उपयोग नहीं करेंगे। इस विशिष्ट उत्तर को देखें: stackoverflow.com/a/35484965/2499090
ब्रेंट रिटनहाउस

9

जांचें कि क्या MySQL कनेक्शन खुला है

ConnectionState state = connection.State;
if (state == ConnectionState.Open)
{
    return true;
}
else
{
    connection.Open();
    return true;
}

हमेशा सच लौटने का उद्देश्य क्या है? इस बिंदु पर, विधि को शून्य बनाएं। केवल, जांचें कि क्या कनेक्शन खुला नहीं है और यदि ऐसा है तो इसे खोलें। और ... 2 बार क्यों लिखना return true;? इस विधि के अंत में डाल, बाहर if/ else!
मैसिमिलियानो क्रूस

नेटवर्क समस्याओं के मामले में ये गलत उत्तर देंगे। आपको यकीन नहीं हो सकता कि खुला वास्तव में खुलेगा।
user613326

@ user613326 वास्तव में, यह नहीं होगा। उदाहरण कोड में कोई त्रुटि हैंडलिंग नहीं है, इसलिए कनेक्ट करते समय कोई समस्या केवल अपवाद को संभालने के लिए आपको फेंक देगी और छोड़ देगी। लौटाया गया मान इसलिए सही है।
टॉम लिंट

6

आप इसका उपयोग भी कर सकते हैं

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

1
using System.Data;किसी के लिए भी जो नहीं जानता था, या यह नहीं जानता था कि यह काम क्यों नहीं कर रहा था
सीओपी

5

यह कोड एक कनेक्शन खोलने से पहले थोड़ा और रक्षात्मक है, स्थिति जांचें। यदि कनेक्शन स्थिति टूटी हुई है, तो हमें इसे बंद करने का प्रयास करना चाहिए। टूटी का मतलब है कि कनेक्शन पहले खोला गया था और सही ढंग से काम नहीं कर रहा था। दूसरी स्थिति यह निर्धारित करती है कि कनेक्शन स्थिति को फिर से खोलने के प्रयास से पहले बंद कर दिया जाना चाहिए ताकि कोड को बार-बार कहा जा सके।

// Defensive database opening logic.

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

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

बस थोड़ा और रक्षात्मक हो रहा है।
GBGOLC

1
समीक्षा कतार से: मैं आपसे अनुरोध कर सकता हूं कि कृपया अपने उत्तर के आसपास कुछ और संदर्भ जोड़ दें। कोड-केवल उत्तर समझना मुश्किल है। यह पूछने वाले और भविष्य के पाठकों दोनों की मदद करेगा यदि आप अपनी पोस्ट में अधिक जानकारी जोड़ सकते हैं। पूरी तरह से कोड-आधारित उत्तरों की व्याख्या करना भी देखें ।
help-info.de

3

डेटाबेस कनेक्शन स्थिति की जांच करने के लिए आप बस निम्नलिखित को सरल कर सकते हैं

if(con.State == ConnectionState.Open){}

2

OleDbConnection राज्य की जाँच करने के लिए इसका उपयोग करें:

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

State ये वापिस ConnectionState

public override ConnectionState State { get; }

यहाँ अन्य ConnectionStateenum हैं

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
    }

-5

मैं निम्नलिखित तरीके का उपयोग करता हूं sqlconnection.state

if(conexion.state != connectionState.open())
   conexion.open();

7
connectionState.open()मौजूद नहीं है; क्या आपका मतलब था ConnectionState.Open?
पीटर रिची
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.