2012-04-11 14 views
51

मैं 15 सेकंड के डिफ़ॉल्ट SqlConnection टाइमआउट ओवरराइड करने के लिए कोशिश कर रहा हूँ और कह रही है किSqlConnection टाइमआउट

संपत्ति या इंडेक्सर क्योंकि यह केवल पढ़ने के लिए है नहीं सौंपा जा सकता है एक त्रुटि हो रही है बदल रहा है।

क्या इसके आसपास कोई रास्ता है?

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(); 
    } 
} 
+3

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

+0

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

+0

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

उत्तर

107

उपयोग करने के लिए किसी विशेष क्वेरी के लिए समय समाप्त उपलब्ध कराना चाहते हैं की जरूरत है, तो CommandTimeout आगे का रास्ता है।

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

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

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

connect timeout=180; 
+1

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

33

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

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

3

आप Connection Timeout=180; अपने कनेक्शन स्ट्रिंग को

+1

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

5

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

के रूप में अन्य लोगों ने कहा:

connection.ConnectionTimeout प्रारंभिक कनेक्शन

command.CommandTimeout अलग-अलग खोजों, अद्यतन के लिए प्रयोग किया जाता है के लिए प्रयोग किया जाता है, आदि

लेकिन:

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

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

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

8

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

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

आप सेट कर सकते ConnectionTimeout केवल आप एक उदाहरण बनाने के लिए:

<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> 

कोड करके आप इस तरह से कनेक्शन प्राप्त कर सकते हैं। जब इंस्टेंस बनता है तो आप इस मान को नहीं बदलते हैं।