Dapper.NET में कमांड टाइमआउट समायोजित करना?


96

मैं Dapper के माध्यम से एक संग्रहीत कार्यविधि के माध्यम से SQL बैकअप चलाने की कोशिश कर रहा हूं (मेरे ऐप के बाकी डैपर का उपयोग करता है इसलिए मैं इस भाग को इसके माध्यम से भी चालू रखना पसंद करूंगा)। यह तब तक ठीक काम करता है जब तक कि कमांडटाइमआउट किक नहीं करता।

using (var c = SqlConnection(connstring))
{
    c.Open();
    var p = new DynamicParameters();
    // fill out p

    c.Execute("xp_backup_database", p, commandType: CommandType.StoredProcedure);
}

SqlCommand में केवल कमांडटाइम सेटिंग मुझे पता है। क्या डैपर के माध्यम से इसे सेट करने का कोई तरीका है?


1
जो भी कारण हो, मैं अभी अपने सवाल का जवाब नहीं दे सकता। लेकिन यह सिर्फ नामांकित तर्क "कमांडटाइमआउट: 0" को c.Execute () में जोड़ने पर लगता है।
श-बीटा

जवाबों:


108

हां, Execute फ़ंक्शन के कई संस्करण हैं। उनमें से एक (या अधिक) में कमांडटाइमआउट पैरामीटर हैं:

public static int Execute(this IDbConnection cnn, string sql, 
                dynamic param = null, IDbTransaction transaction = null, 
                            int? commandTimeout = null, CommandType? commandType = null)

SqlMapper.cs से लिया गया


4
मेरे पास भी यही समस्या थी, लेकिन क्वेरी विधि के साथ, हालांकि समाधान ने इसके लिए भी काम किया, क्योंकि इसमें कमांडटाइमआउट पैरामीटर भी है।
जाहू

2
@DrSchizo इसका उपयोग क्यों नहीं किया जाएगा, इस समय से बचने के लिए Async Await का कोई कारण नहीं है
मृणाल कांबोज

1
@DrSchizo डॉक्स का कहना है कि इसका उपयोग अतुल्यकालिक तरीकों जैसे कि एसिंक्रोनस्यूटरीडर के साथ नहीं किया गया है, न कि एसिंक्स / वेट। मैं यह मानता हूं क्योंकि यदि आप BeginExecuteReader का उपयोग करते हैं, तो यह माना जाता है कि आप अपने स्वयं के टाइमआउट तर्क का उपयोग करेंगे।
jugg1es

3
क्या सभी प्रश्नों के लिए यह समय निर्धारित करना संभव है? मैंने कोशिश की, SqlConnection.ConnectionTimeout Propertyलेकिन यह कहता है कि यह केवल पढ़ा जाता है। मुझे कुछ कस्टम माइग्रेशन कार्यक्रमों के लिए इसकी आवश्यकता होगी। हर बयान के साथ इसे टाइप करना थकाऊ है।
तद्ज

6
@jedatkinports SqlMapper.Settings.ommandTimeout मेरा मानना ​​है कि आप उसके बाद हैं।
शिव

62

मूल प्रश्न से स्वीकृत प्रश्न के साथ उदाहरण जोड़ा गया है, यदि कोई ऐसा चाहता है। (टाइमआउट 60 सेकंड के लिए सेट है):

using (var c = SqlConnection(connstring))
{
    c.Open();
    var p = new DynamicParameters();
    // fill out p

    c.Execute("xp_backup_database", p, commandTimeout: 60, 
                                       commandType: CommandType.StoredProcedure);
}

11

सभी प्रश्नों / डीबी कॉल के लिए कमांड टाइमआउट निर्धारित करने की आवश्यकता नहीं है। आप नीचे की तरह विश्व स्तर पर सेट कर सकते हैं।

Dapper.SqlMapper.Settings.CommandTimeout = 0;

आप इस स्थिर संपत्ति को एप्लिकेशन लोड पर या डेटाबेस क्लास कंस्ट्रक्टर में इनिशियलाइज़ कर सकते हैं।

यह दोहराव को दूर करने में मदद करता है, और यदि आप इसे बाद में बदलने का निर्णय लेते हैं, तो आप इसे एक बार बदल देते हैं।


1

मैं कनेक्शन का उपयोग करके अपनी समस्या को हल करने में सक्षम था। सीधे टाइमआउट सेट करना

int timeOutInSeconds = 60;
.
.
.
result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.