এসকিউএল সংযোগটি খোলা আছে বা বন্ধ আছে কিনা তা পরীক্ষা করে দেখুন


102

এটি কীভাবে খোলা বা বন্ধ ছিল তা আপনি কীভাবে পরীক্ষা করবেন check

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

তবে, এমনকি রাজ্যটি 'উন্মুক্ত' এটি এই চেকটিতে ব্যর্থ।

উত্তর:


175

আপনার স্কেল সংযোগ.স্টেট ব্যবহার করা উচিত

যেমন,

using System.Data;

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

2
+1 ঠিক - SqlConnectionState
এনাম হিসাবে এনাম

4
using System.Data;উত্তরে যুক্ত করা উচিত ছিল , আইএমএইচও। আমি এই নেমস্পেসটি ভুলে গিয়েছিলাম (কী ছিল 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();
}

কারণ কানেকশনস্টেটটিও হতে পারে:

Broken, Connnecting, Executing, Fetching

এ ছাড়াও

Open, Closed

অতিরিক্তভাবে মাইক্রোসফ্ট জানিয়েছে যে ক্লোজিং এবং তারপরে সংযোগটি পুনরায় খোলার ফলে "রাজ্যের মান সতেজ হবে।" এখানে দেখুন http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.state(v=vs.110).aspx


আপনার পরীক্ষা করা উচিত যদি mySQLConnection.State != ConnectionState.Open && mySQLConnection.State != ConnectionState.Connectingধীর সংযোগের সাথে পুনরায় সেট করা এড়ানো যায়, তাই না?
ক্যালিগারি

@ কালিগারি সত্য হলেও, ডিবি সংযোগের জন্য কোনও গ্যারান্টি উপস্থিত নেই, সুতরাং যদি বিমূর্ত ডিবি সংযোগে প্রোগ্রামিং করা হয় তবে সাবধান হন।
জন জাব্রোস্কি

1
আমি ব্যক্তিগতভাবে মনে করি আপনি এড়িয়ে সমস্যা সমাধানের এটিই। আমি সম্ভবত এই কোড স্নিপেটের জন্য রাষ্ট্রীয় অ্যাপ্লিকেশন স্তরে ব্যবহারের কেসটি দেখতে পাচ্ছি, তবে ওয়েবে কখনও দেখিনি?
জন জাব্রোস্কি

জন, এই কোডটির জন্য হ'ল ব্যবহারের বিষয়টি। কোডটি এমন একটি সার্ভার অ্যাপ্লিকেশন চালিয়ে যা পৃষ্ঠাগুলি পরিবেশন করা হতে পারে, অন্য কোনও আরএসটি সার্ভারের সাথে সংযুক্ত হতে পারে। কোনও ওয়েব অ্যাপ্লিকেশনে ক্লায়েন্ট সাইড কোডের একটি সার্ভার ডাটাবেসে আমি সংযোগ করব এমন কোনও ক্ষেত্রে আমি দেখতে পাচ্ছি না।
therealjumbo

এর সাথে একটি বিশাল দৈত্য রয়েছে: 1) লোকাল স্টোরেজ এখন একটি জিনিস হয়ে ওঠে, তাড়াতাড়ি বা পরে (ইতিমধ্যে?) যে ওয়েব অ্যাপ্লিকেশন স্থানীয় স্টোরেজ ব্যবহার করে সেই স্টোরেজে একটি ডাটাবেস ব্যবহার করতে চলেছে। এখনই না হলে তারা শীঘ্রই আসবে। এখানে অন্য জিনিসটি হ'ল, আমার কোডটি সম্ভবত কোনও বড় অ্যাপ্লিকেশনটিতে ব্যবহার করার জন্য যথাযথভাবে সাধারণীকরণ করা হয়নি। আমার মূল ফোকাসটি এম্বেড করা প্রোগ্রামিং, তাই আমি এখনও সার্ভার সাইডে শিখছি।
Therealjumbo

24

.NET ডকুমেন্টেশন বলে: রাষ্ট্রীয় সম্পত্তি: সংযোগ স্টেট মানগুলির একটি বিটওয়াইস সংমিশ্রণ

সুতরাং আমি মনে করি আপনার চেক করা উচিত

!myConnection.State.HasFlag(ConnectionState.Open)

পরিবর্তে

myConnection.State != ConnectionState.Open

কারণ রাজ্যে একাধিক পতাকা থাকতে পারে।


আমি ভাবছি যে এটি পতাকা সহ কেন হয়। যেহেতু এই এনামের ক্লোজ আইটেমের মান শূন্য তখন স্টেট.হ্যাসফ্ল্যাগ (কানেকশনস্টেট.ক্লোজ) যে কোনও মানের জন্য সত্য ফিরে আসবে। আমার জন্য এটির অর্থ হ'ল আমার "! = বন্ধ" হিসাবে চেক করা উচিত
ইভান


4
দ্রষ্টব্য: Ivan এর লিঙ্কটিতে উল্লেখ করা প্রয়োজন যে আমি এটি প্রয়োজনীয় বলে মনে করি যে আপনি এটি পতাকা হিসাবে ব্যবহার করবেন না। এই নির্দিষ্ট উত্তরটি দেখুন: stackoverflow.com/a/35484965/2499090
ব্রেন্ট রিটেনহাউস

9

কোনও মাইএসকিউএল সংযোগ খোলা আছে কিনা তা পরীক্ষা করে দেখুন

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

সবসময় সত্য ফিরে আসার উদ্দেশ্য কী? এই মুহুর্তে, পদ্ধতিটি বাতিল করে দিন। কেবল, পরীক্ষা করুন যে সংযোগটি খোলা নেই এবং যদি তা খোলেন। এবং ... কেন 2 বার লিখছেন return true;? এটিকে মেথডের শেষে, if/ এর বাইরে রেখে দিন else!
ম্যাসিমিলিয়ানো ক্রাউস

নেটওয়ার্ক সমস্যার ক্ষেত্রে এগুলি একটি ভুল উত্তর দেয়। আপনি নিশ্চিত হতে পারবেন না যে খোলা সত্যই উন্মুক্ত হবে।
ব্যবহারকারী 613326

@ 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

ওলেডিবি সংযোগের স্থিতি পরীক্ষা করতে এটি ব্যবহার করুন:

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
    }

-5

আমি নিম্নলিখিত পদ্ধতি ব্যবহার করি sqlconnection.state

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

7
connectionState.open()অস্তিত্ব নেই; তুমি কি বোঝাতে চাইলে ConnectionState.Open?
পিটার রিচি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.