मान लीजिए कि मैं लंबे समय से चल रहे SQL सर्वर संग्रहीत प्रक्रिया को चलाने के लिए C# का उपयोग करता हूं (30 मिनट कहें)। और मान लीजिए कि मैंने सी # में क्वेरी पर 1 घंटे की टाइमआउट अवधि लगाई है, अगर किसी भी कारण से एसपी उम्मीद से अधिक समय लेता है, तो मैं डीबी एकाधिकार को समाप्त नहीं करता हूं। अंत में, मान लीजिए कि इस संग्रहित प्रक्रिया में त्रुटियों को पकड़ने के लिए इसमें एक कोशिश/पकड़ ब्लॉक है और कुछ साफ-सफाई करना इसके अंदर कोई भी कदम विफल होना चाहिए।SQL सर्वर एक समयबद्ध अनुरोध के साथ क्या करता है?
कुछ कोड (सी #):
using (SqlCommand comm = new SqlCommand("longrunningstoredproc"))
{
comm.Connection = conn;
comm.CommandType = CommandType.StoredProcedure;
comm.CommandTimeout = 3600;
comm.ExecuteNonQuery();
}
/* Note: no transaction is used here, the transactions are inside the stored proc itself. */
T-SQL (मूल रूप से के लिए राशि के बाद):
BEGIN TRY
-- initiailize by inserting some rows into a working table somewhere
BEGIN TRANS
-- do long running work
COMMIT TRANS
BEGIN TRANS
-- do long running work
COMMIT TRANS
BEGIN TRANS
-- do long running work
COMMIT TRANS
BEGIN TRANS
-- do long running work
COMMIT TRANS
BEGIN TRANS
-- do long running work
COMMIT TRANS
-- etc.
-- remove the rows from the working table (and set another data point to success)
END TRY
BEGIN CATCH
-- remove the rows from the working table (but don't set the other data point to success)
END CATCH
मेरा प्रश्न है, एसक्यूएल सर्वर जब आदेश क्वेरी के साथ क्या करेंगे सी # पक्ष से बाहर समय? क्या यह एसपी के कैच ब्लॉक का आह्वान करेगा, या क्या यह पूरी तरह से इसे बंद कर देगा जैसे कि मुझे सी # कोड में क्लीन-अप करने की आवश्यकता होगी?
आदेश सी # साइट से टाइम आउट नहीं होगा:
यहाँ इस के लिए संदर्भ है। सी # कोड पर इसका कोई नियंत्रण नहीं है (उसने डीबी को 1 घंटे के बाद टाइमआउट करने के लिए कहा, और डीबी बस यही करता है)। – Oded