मैंने सी # में SqlTransaction
को शुरू करने, प्रतिबद्ध करने और रोलबैक लेनदेन के लिए लागू किया है। सब ठीक हो रहा है, लेकिन लेनदेन के दौरान कनेक्शन में आने वाली उन तालिकाओं तक पहुंचने में मुझे कुछ समस्या आई है। मैं लेनदेन के दौरान तालिका को पढ़ने में सक्षम नहीं था (वे तालिका जो लेनदेन में हैं)। इस बारे में खोज करते समय, मैंने पाया कि यह एक विशेष लॉक के कारण होता है। उस डेटा पर किसी भी बाद के चयन को अनन्य लॉक को रिलीज़ होने की प्रतीक्षा करनी होगी। फिर, मैं SqlTransaction
द्वारा प्रदान किए गए प्रत्येक अलगाव स्तर से गुज़र चुका हूं, लेकिन यह काम नहीं करता है। तो, मुझे लेन-देन के दौरान विशेष लॉक जारी करने की आवश्यकता है ताकि अन्य उपयोगकर्ता उस तालिका तक पहुंच प्राप्त कर सकें और डेटा पढ़ सकें। क्या यह प्राप्त करने के लिए कोई तरीका है? अग्रिम धन्यवाद।एसक्यूएल लेनदेन में अलगाव स्तर
यहाँ लेनदेन
try
{
SqlTransaction transaction = null;
using (SqlConnection connection=new SqlConnection(Connection.ConnectionString))
{
connection.Open();
transaction=connection.BeginTransaction(IsolationLevel.Snapshot,"FaresheetTransaction");
//Here all transaction occurs
if (transaction.Connection != null)
{
transaction.Commit();
transaction.Dispose();
}
}
}
catch (Exception ex)
{
if (transaction.Connection != null)
transaction.Rollback();
transaction.Dispose();
} `
इस कोड को ठीक काम कर रहा है के लिए मेरे ग # कोड है, लेकिन समस्या यह है कि जब मैं लेन-देन के समय के दौरान टेबल के डेटा (लेनदेन के दौरान पहुँचा उन) का उपयोग। आवेदन के अन्य भागों द्वारा टेबल का उपयोग किया जा रहा है। इसलिए, जब मैंने टेबल से डेटा पढ़ने की कोशिश की, तो यह एक अपवाद फेंकता है।
क्या आपके यहाँ इरादा है? जब अद्यतन करने कोई लॉक नहीं ले? या अन्य पाठकों के लिए ताले को अनदेखा करना है? (जो बहुत अच्छे कारणों से हैं) –
मैं अन्य उपयोगकर्ताओं के लिए ट्रांज़ेक्टेड टेबल में लॉक नहीं करना चाहता हूं .... लेनदेन लंबी अवधि के लिए जा सकता है क्योंकि लेनदेन के समय, टेबल में हजारों डेटा प्रविष्टियां हैं, इसलिए शायद यह लंबा समय लगेगा ... तो, ट्रैन की अवधि में सक्शन, मैं चाहता हूं कि अन्य उपयोगकर्ता उस टेबल पर पहुंच प्राप्त करें और डेटा पढ़ सकें ....... –