BeginTrans विधि को उस फ़ंक्शन के रूप में उपयोग किया जा सकता है जो लेनदेन के घोंसले स्तर को लौटाता है। यदि आप इसे स्टोर करने के लिए कोई संपत्ति बनाते हैं तो आप इसे देख सकते हैं कि आपको यह देखने की आवश्यकता है कि यह 0 से अधिक है या नहीं। जब आप प्रतिबद्ध करते हैं या रोलबैक करते हैं तो आपको संपत्ति को कम करने की आवश्यकता होगी।
Private m_TransLevel As Long
Public Property Get TransactionLevel() As Long
TransactionLevel = m_TransLevel
End Property
Public Property Let TransactionLevel(vLevel As Long)
m_TransLevel = vLevel
End Property
Public Sub SaveMyData()
TransactionLevel = adoConnection.BeginTrans()
...
End Sub
तुम भी एक समारोह है कि सही/गलत रिटर्न के अंदर काम करने के लिए करता है, तो स्तर> 1. मैं भी इस तरह नहीं है वापसी मान अनुकूलन सकता है, लेकिन यह (कुछ इस तरह त्रुटि हैंडलिंग के बिना लगेगा)
Public Function IsConnectionInsideTransaction(ByVal vADOConnection as ADOBD.Connection) As Boolean
Dim intLevel As Integer
If vADOConnection.State = AdStateOpen Then
intLevel = vADOConnection.BeginTrans()
IsConnectionInsideTransaction = (intLevel > 1)
vADOConnection.RollbackTrans
End If
End Function
मैंने पहली विधि के बदलावों के बारे में सोचा है, अनिवार्य रूप से ADODB.Connection को एक नए में लपेटना MyConnection क्लास जो इसे और अन्य कार्यक्षमता जोड़ देगा। यदि संभव हो तो मौजूदा कोड में परिवर्तन को कम करना चाहता था। दूसरा तरीका मेरे प्रश्न का उत्तर देता है, मुझे लगता है, लेकिन मेरे लिए बहुत जोखिम भरा लगता है, मैं वास्तव में डेटाबेस के साथ बातचीत करने के लिए हर बार जांच नहीं करना चाहता ... सुझावों के लिए धन्यवाद! –
अपने स्वयं के कनेक्शन वर्ग के साथ लपेटने के कुछ अन्य फायदे हो सकते हैं। यदि आपको कभी भी VB.net में अपग्रेड करने की आवश्यकता है, तो यदि आप सभी एडीओ ऑब्जेक्ट्स को अपनी ऑब्जेक्ट्स में लपेट चुके हैं तो यह आसान हो सकता है। आप उन्हें एडीओ (मौजूदा कोड में परिवर्तन को कम करने के लिए) के समान हस्ताक्षर कर सकते हैं, लेकिन अपग्रेड प्रयास के दायरे को सीमित करने के लिए केवल न्यूनतम कार्यक्षमता का पर्दाफाश कर सकते हैं। मैं उन्हें एक डीएलएल परियोजना में डालने का सुझाव दूंगा ताकि मुख्य परियोजना एडीओ का भी संदर्भ न दे। पूर्ण प्रकटीकरण: हमने इसे पूरी तरह से अपनी परियोजनाओं में नहीं किया है, लेकिन मेरी इच्छा है कि हमारे पास। – MarkJ
यदि हमारे रिपोर्टिंग इंजन ने 'ADODB.Connection' के आस-पास एक रैपर का उपयोग किया है! मैंने मौजूदा रिपोर्ट निष्कर्षण कोड में परिवर्तन को कम करने के विचार के साथ खिलवाड़ किया है ताकि उपयोगकर्ता वायरलेस कनेक्शन पर रिपोर्ट चला सकें (जो हमारे मामले में एक कस्टम आरपीसी सर्वर के माध्यम से जाता है)। –