SqlConnection मध्यांतर बदलना


81

मैं SqlConnection15 सेकंड के डिफ़ॉल्ट समय को ओवरराइड करने की कोशिश कर रहा हूं और यह कहते हुए एक त्रुटि हो रही है कि द

प्रॉपर्टी या इंडेक्स को असाइन नहीं किया जा सकता है क्योंकि यह केवल पढ़ा जाता है।

क्या इसके चारों ओर एक रास्ता है?

using (SqlConnection connection = new SqlConnection(Database.EstimatorConnection))
{
   connection.Open();

   using (SqlCommand command = connection.CreateCommand())
   {
       command.CommandType = CommandType.StoredProcedure;
       connection.ConnectionTimeout = 180; // This is not working 
       command.CommandText = "sproc_StoreData";
       command.Parameters.AddWithValue("@TaskPlanID", order.Projects[0].TaskPlanID);
       command.Parameters.AddWithValue("@AsOfDate", order.IncurDate);

       command.ExecuteNonQuery();
    }
}

5
क्या आप कनेक्शन खोलने का प्रयास करने के बाद कनेक्शन टाइमआउट सेट करना चाहते हैं? क्या आपका मतलब है कमांडटाइम?
एलेक्स के।

2
मैं वास्तव में, वास्तव में यह नहीं देखता कि उन्होंने संपत्ति को केवल पढ़ने के लिए क्यों बनाया। कंधा पढ़ा-लिखा, आईएमओ था।
xofz

प्रॉपर्टी कनेक्शन के बाद ही पढ़ी जाती है। चर्चा के लिए अन्य प्रतिक्रियाएँ देखें। कनेक्ट करने का प्रयास करते समय कनेक्शन टाइमआउट प्रभावित करता है। यह अक्सर Azure SQL DB के लिए इसे बढ़ाने के लिए उपयोगी है। जब कोई क्वेरी चलाते हैं, तो कमांडटाइमआउट टाइमआउट को प्रभावित करता है।
बिल गिब्सन - MSFT

@ सॅम पियर्सन यह तब तक लिखा-पढ़ा जाता है जब तक कनेक्शन खोला नहीं जाता है, जब कनेक्शन। ओपेन (); कहा जाता है। इस बिंदु से टाइमर पहले से ही चल रहा है।
वंडरवर्कर

जवाबों:


156

यदि आप किसी विशेष क्वेरी के लिए टाइमआउट प्रदान करना चाहते हैं, तो कमांडटाइमआउट आगे का रास्ता है।

इसका उपयोग है:

command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds.

17
वह कमांड टाइमआउट के बारे में बात नहीं कर रहा है, वह कनेक्शन टाइमआउट के बारे में बात कर रहा है।
लैरीबड

39

आप कनेक्शन स्ट्रिंग में टाइमआउट मान सेट कर सकते हैं, लेकिन आपके कनेक्ट होने के बाद यह केवल पढ़ने के लिए है। आप http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx पर अधिक पढ़ सकते हैं

जैसा कि अनिल का अर्थ है, कनेक्शनटाइमआउट वह नहीं हो सकता है जिसकी आपको आवश्यकता है; यह नियंत्रित करता है कि ADO ड्राइवर कब तक एक नया कनेक्शन स्थापित करते समय प्रतीक्षा करेगा। आपका उपयोग किसी विशेष SQL क्वेरी को निष्पादित करने के लिए सामान्य से अधिक समय तक प्रतीक्षा करने की आवश्यकता को इंगित करता है, और उस स्थिति में अनिल बिल्कुल सही है; एक व्यक्ति SqlCommand के लिए अपेक्षित समापन समय को बदलने के लिए CommandTimeout (जो R / W) का उपयोग करें।


20

एक क्लीनर तरीका है xml फ़ाइल में connectionString सेट करना, उदाहरण के लिए Web.Confing(WepApplication)या App.Config(StandAloneApplication)

 <connectionStrings>
    <remove name="myConn"/>
    <add name="myConn" connectionString="User ID=sa;Password=XXXXX;Initial Catalog=qualitaBorri;Data Source=PC_NAME\SQLEXPRESS;Connection Timeout=60"/>
  </connectionStrings>

कोड द्वारा आप इस तरह से कनेक्शन प्राप्त कर सकते हैं:

public static SqlConnection getConnection()
{
        string conn = string.Empty;
        conn = System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
        SqlConnection aConnection = new SqlConnection(conn);
        return aConnection;
}

आप ConnectionTimeoutकेवल एक उदाहरण सेट कर सकते हैं । जब उदाहरण बनाया जाता है तो आप इस मान को नहीं बदलते हैं।


17

आप इसे हमेशा अपने कनेक्शन स्ट्रिंग में जोड़ सकते हैं:

connect timeout=180;

2
कनेक्शन टाइमआउट कमांडटाइमआउट से अलग है। कनेक्शन टाइमआउट डेटाबेस के प्रारंभिक कनेक्शन को हल करने में लगने वाले समय के लिए है। कमांडटाइमआउट विशेष क्वेरी के लिए टाइमआउट अवधि बदलता है।
m0g

@ m0g मुझे समझ नहीं आ रहा है कि यह स्वीकृत उत्तर क्यों नहीं है। यहां प्रश्न शायद कनेक्शन टाइमआउट के बारे में बहुत स्पष्ट है, जो 15 में चूकता है, और एक SqlConnection की केवल पढ़ने योग्य संपत्ति है जिसे कनेक्शन स्ट्रिंग में परिभाषित किया जाना चाहिए। कोड सूची की लाइन विशेष रूप से SqlConnection.ConnectionTimeout सेट करने का प्रयास करती है। कमांड टाइमआउट 30 में चूक जाता है, और SqlCommand का एक पठन / लेखन पैरामीटर है, एक पूरी तरह से अलग वस्तु। प्रश्न का त्रुटि संदेश 15 का मान दिखाता है, और प्रश्न विशेष रूप से SqlConnection कहता है, SqlCommand नहीं।
बेकन बिट्स

1
@BaconBits ने जो प्रश्न पोस्टर का वर्णन किया और पूछा कि वह क्या चाहता है वह अलग है इसलिए स्वीकृत उत्तर कुछ अलग है।
m0g

8

आप Connection Timeout=180;अपने कनेक्शन स्ट्रिंग में जोड़ सकते हैं


4
कनेक्शन टाइमआउट कमांडटाइमआउट से अलग है। कनेक्शन टाइमआउट डेटाबेस के प्रारंभिक कनेक्शन को हल करने में लगने वाले समय के लिए है। कमांडटाइमआउट विशेष क्वेरी के लिए टाइमआउट अवधि बदलता है।
m0g

7

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

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectTimeout = 10;
using (var connection = new SqlConnection(builder.ToString()))
{
    // code goes here
}

6

पुरानी पोस्ट, लेकिन जैसा कि मैं जो खोज रहा था, उसके लिए मैं इस विषय पर कुछ जानकारी जोड़ूंगा। मैं एक टिप्पणी जोड़ने जा रहा था, लेकिन मेरे पास पर्याप्त प्रतिनिधि नहीं है।

जैसा कि दूसरों ने कहा है:

connection.ConnectionTimeout का उपयोग प्रारंभिक कनेक्शन के लिए किया जाता है

command.CommandTimeout का उपयोग व्यक्तिगत खोजों, अपडेट आदि के लिए किया जाता है।

परंतु:

connection.ConnectionTimeout का उपयोग लेन-देन करने और वापस लेन-देन के लिए भी किया जाता है।

हां, यह बिल्कुल पागल डिजाइन निर्णय है।

इसलिए, यदि आप कमिट या रोलबैक पर टाइमआउट में चल रहे हैं, तो आपको कनेक्शन स्ट्रिंग के माध्यम से इस मान को बढ़ाने की आवश्यकता होगी।


"Connection.ConnectionTimeout का उपयोग लेन-देन करने और वापस लेन-देन के लिए भी किया जाता है। हाँ, यह बिल्कुल पागल डिजाइन निर्णय है।" वास्तव में? मुझे विश्वास नहीं होता कि यह सच है। यदि यह सच था, तो 15 सेकंड के कनेक्शन समय से अधिक समय तक चलने वाला कोई भी लेनदेन विफल हो जाएगा। आपको स्पष्ट करने की आवश्यकता है।
त्रिनको

अब, अगर आपका मतलब है कि यह केवल कमिट या रोलबैक कमांड सबमिट करने के लिए टाइमआउट के रूप में उपयोग किया जाता है, तो नहीं ... यह एक पागल निर्णय नहीं है। यह मूल रूप से एक तात्कालिक कमांड है जिसे तुरंत वापस आ जाना चाहिए, क्योंकि यह सर्वर को कमिट करने या वापस रोल करने के लिए संकेत दे रहा है। यदि यह सर्वर तक पहुंचने और तुरंत प्रतिक्रिया प्राप्त करने में विफल रहता है, तो यह मूल रूप से एक कनेक्शन टाइमआउट है, यही कारण है कि यह इस तरह से उपयोग करने के लिए समझ में आता है।
त्रिवेंको

3

आप कनेक्शन टाइमआउट को कनेक्शन स्तर और कमांड स्तर पर सेट कर सकते हैं।

कनेक्शन स्ट्रिंग में "कनेक्शन टाइमआउट = 10" जोड़ें। अब कनेक्शन टाइमआउट 10 सेकंड है।

var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Connection Timeout=10";
using (var con = new SqlConnection(connectionString))
{

}

SqlCommand के लिए CommandTimeout प्रॉपर्टी का सेट

var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword";
using (var con = new SqlConnection(connectionString))
{

    using (var cmd =new SqlCommand())
    {
        cmd.CommandTimeout = 10;
    }

}


0

मुझे इस विषय पर एक उत्कृष्ट ब्लॉगपोस्ट मिला: https://improve.dk/controlling-sqlconnection-timeouts/

असल में, आप कनेक्शन स्ट्रिंग में कनेक्ट टाइमआउट सेट करते हैं, या आप कमांड ऑब्जेक्ट पर कनेक्शन टाइमआउट को सेट करते हैं।

ध्यान रखें कि टाइमआउट समय सेकंडों में है।


नमस्कार और एसओ में आपका स्वागत है! कृपया दौरा पढ़ें , और मैं एक अच्छा उत्तर कैसे लिखूं? कोड नमूने जोड़ना हमेशा मददगार होता है।
तोमर शीता

केवल लिंक का उपयोग करने से बचें, लिंक भविष्य में बदल सकते हैं। यदि आवश्यक हो तो अपने उत्तर को स्पष्ट करने में मदद करने के लिए कुछ बहुमूल्य युक्तियां और कुछ स्रोत कोड जोड़ें
कॉलिनवा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.