2013-03-12 6 views
6

IDbConnection.ExecuteSql का उपयोग करते समय मैं कमांड टाइमआउट कैसे सेट करूं?सर्विसस्टैक OrmLite कमांड टाइमआउट

IDbConnection db = ConnectionFactory.OpenDbConnection(); 
db.ExecuteSql("..."); 

अगर मैं IDbCommand.ExecuteSql उपयोग करें (नीचे देखें) विधि मैं कमान टाइमआउट सेट कर सकते हैं, लेकिन मैं पदावनत तरीकों के बारे में चेतावनी का एक समूह मिलता है।

IDbCommand comm = db.CreateCommand() 
comm.CommandTimeout = 240;      
comm.ExecuteSql("...");

उत्तर

3
सबसे हाल ही में परिवर्तन OrmLite नहीं रह गया है IDbCommand वस्तु के आसपास एपीआई सीधे प्रदान करता है (जो अब सभी नवीनतम संस्करण में आंतरिक किए गए हैं) के साथ

IDbConnection db = ConnectionFactory.OpenDbConnection(); 
IDbCommand cmd = db.CreateCommand(); 
cmd.CommandTimeout = 240; 
cmd.CommandText = "..."; 
cmd.ExecuteNonQuery(); 

वैकल्पिक रूप से:

लेकिन OrmLite के बाद से दर-पारित जब आप की जरूरत है और सिर्फ उन्हें सीधे का उपयोग जैसे OrmLite के विस्तार के तरीकों आसानी से ADO.NET के अंतर्निहित IDbConnection और IDbCommand इंटरफेस पर केवल विस्तार के तरीकों है, आप कर सकते हैं थोड़ा देर से पार्टी के लिए

OrmLiteConfig.CommandTimeout = 240; 
+2

क्या होगा यदि हम डीबी द्वारा उत्पन्न एसक्यूएल का उपयोग करना चाहते हैं। चयन करें। जब हम टाइमआउट सेट करना चाहते हैं, तो हमें कस्टम हस्तलिखित एसक्यूएल प्रश्नों का उपयोग करना चाहिए? @mythz – mustafasturan

+0

@ mustafasturan, एक ही समस्या है ... मैं 'IDbConnection.Query <>' का उपयोग करता हूं और मुझे * * के टाइमआउट निर्दिष्ट करने की आवश्यकता है। –

+0

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

4

और जैसा कि आप मेरी टिप्पणी में देखा है, मैं इस सटीक मुद्दा लिया है: आप के साथ एक वैश्विक CommandTimeout सेट कर सकते हैं। मेरा समाधान मिथक के सुझाव पर विस्तार करना और एक नई विस्तार विधि बनाना था:

public static partial class IDbConnectionExtensionMethods 
{ 
    public static List<T> Query<T>(this IDbConnection self, string sql, int commandTimeout) 
    { 
     List<T> results = null; 
     self.Exec((dbCmd) => 
      { 
       dbCmd.CommandTimeout = commandTimeout; 
       dbCmd.CommandText = sql; 
       using (var reader = dbCmd.ExecuteReader()) 
       { 
        results = reader.ConvertToList<T>(); 
       } 
      }); 

     return results; 
    } // eo Query<T> 
} // eo class IDbConnectionExtensionMethods 
संबंधित मुद्दे