हालांकि, मेरी धारणा कुछ शोध के बाद व्यक्तिपरक लगती है, लेकिन मुझे लगता है कि प्रोसेसिंग (क्लोज़/कमिट/रोलबैक) के लिए Using statement का उपयोग करने के बजाय डेवलपर्स को खोजने के लिए असामान्य नहीं है Try/Catch
।IDbConnection/IDbTransaction का उपयोग करने के लिए सुरक्षित उपयोग करने के लिए?
यह कुछ अनुभवी डेवलपर्स और कुछ नए लोगों के लिए भी सच है। मैं जानबूझकर स्टैक ओवरफ्लो या फ़ोरम लिंक पर किसी भी प्रश्न का संदर्भ नहीं दे रहा हूं, इसलिए लोगों को नाराज नहीं होता है। what I found से, Using कथन safe to use (कोई इरादा नहीं है)।
क्या इसमें कुछ गड़बड़ है? निम्नलिखित कोड पर विचार करें:
Public Sub Commit()
Dim cn As IDbConnection = {CREATE_CONNECTION}
Dim tran As IDbTransaction = Nothing
cn.Open()
Try
tran = cn.BeginTransaction
'run some queries here
tran.Commit()
Catch ex As Exception
If Not tran Is Nothing Then tran.Rollback()
Throw
Finally
cn.Close()
End Try
End Function
मान लें {CREATE_CONNECTION}
, एक Sub
कि एक कनेक्शन बनाता है, डेटाबेस वेंडर के आधार पर के लिए जगह धारक है सभी संभव सर्वोत्तम प्रथाओं के अनुसार लिखा और अधिक सुधार की जरूरत नहीं है।
Using cn As IDbConnection = {CREATE_CONNECTION}
cn.Open()
Using tran As IDbTransaction = cn.BeginTransaction
'run some queries here
tran.Commit()
End Using
End Using
:
वहाँ एक कारण है कि इसके बाद के संस्करण कोड में इस तरह के रूप में लिखा नहीं किया जा सकता है?
स्पष्ट रूप से, संस्करण # 2 यह करने के लिए और अधिक सहज है कि यह क्या कर रहा है। लेकिन शायद मुझे यहां कुछ महत्वपूर्ण याद आ रहा है? डेटा एक्सेस लाइब्रेरीज़ के विक्रेता-विशिष्ट कार्यान्वयन जैसी चीज़ें, जो और/या Connection.Close
को Dispose
पर आंतरिक रूप से कॉल नहीं करती हैं? क्या इस दृष्टिकोण को निकट भविष्य में हटा दिया जा रहा है, या को आधुनिक प्रोग्रामिंग पैटर्न/सर्वोत्तम प्रथाओं में पर्याप्त स्पष्ट नहीं माना गया है? Using
कीवर्ड के लिए डीबग समर्थन की कमी वाले मोनो/मोबाइल ऐप्स देव उपकरण?
मैं इस बिंदु का समर्थन या इनकार करने के किसी भी प्रकार का उत्तर ढूंढ रहा हूं। अधिमानतः मूल दस्तावेज के उद्धरण वाले एक, Do not use Using with IDbTransaction when ...
जैसे कुछ। ब्लॉग या व्यक्तिगत अनुभव के लिए लिंक भी ठीक है।
यह बताता है, धन्यवाद। मेरे संस्करण # 1 की तुलना में निश्चित रूप से अधिक स्पष्ट है। 'GetOpenConnection' के लिए भी +1, मैं कुछ' CreateAndOpenConnection' में 'cn.Open()' को शामिल करने की दिशा में झुकाव भी कर रहा था, क्योंकि यह हर बार कॉल करने के लिए अनावश्यक लगता है। – Neolisk
यदि डेटाबेस से कनेक्शन बंद है, तो क्या लेनदेन अभी भी वापस लुढ़का जाएगा? मैं समझता हूं कि आप संभावित लॉकिंग के बारे में अधिक चिंतित हैं। –