2015-07-22 5 views
8

यदि मैं एक SQL सर्वर पर SqlConnection खोलता हूं, और फिर एकाधिक पृष्ठभूमि धागे से कई प्रश्न जारी करता हूं, तो सभी एक कनेक्शन का उपयोग करते हैं - क्या उन प्रश्नों को अनुक्रमिक रूप से निष्पादित किया जाएगा (आदेश की परवाह नहीं है)?क्या एसक्यूएलकनेक्शन समानांतर में प्रश्नों को संसाधित करता है?

विशेष रूप से, यदि एक प्रश्न की शुरुआत में मैं अलगाव स्तर बदलता हूं और फिर उस क्वेरी के अंत में इसे पुनर्स्थापित करता हूं - क्या कोई मौका है कि यह अलगाव स्तर अन्य प्रश्नों पर लागू हो सकता है?

मुझे नहीं लगता, लेकिन पुष्टि करना चाहते हैं।

एसक्यूएल सर्वर 2008 R2

और मैं के बारे में System.Data.SqlClient.SqlConnection

+3

SqlConnection थ्रेड-सुरक्षित नहीं है। आपको इसे एकाधिक धागे पर उपयोग नहीं करना चाहिए। आपको इसके बजाय प्रति थ्रेड एक कनेक्शन बनाना चाहिए। –

+1

एकाधिक धागे पर SqlConnection ऑब्जेक्ट का उपयोग करने का एकमात्र सुरक्षित तरीका 1 से अधिक समय पर इसका उपयोग नहीं करना है और हां, किसी भी थ्रेड पर आपके द्वारा परिवर्तित कोई भी राज्य या कॉन्फ़िगरेशन इस में किसी भी थ्रेड पर "रिसाव" होगा तौर तरीका। –

+0

@ LasseV.Karlsen async/प्रतीक्षा का उपयोग करने के बारे में कैसे? मुझे लगता है कि THX-1138 एक ही कनेक्शन के तहत एक साथ चल रहे कई प्रश्नों की संभावना का जिक्र कर रहा है। –

उत्तर

1

लोडेड प्रश्न बात कर रहा हूँ, एक निश्चित जवाब असंभव है क्योंकि @ LasseV.Karlsen के रूप में कहा है SqlConnection सुरक्षित थ्रेड नहीं है, इसलिए व्यवहार अप्रत्याशित होने जा रहा है । मैंने अतीत में इसी तरह के परिदृश्यों का प्रयास किया और असफल रहा। यह है कि मुझे लगता है कि आपके प्रश्न के पैरामीटर के साथ क्या होगा।

क्या एसक्यूएलकनेक्शन समानांतर में प्रश्नों को संसाधित करता है?

नहीं, यह नहीं जानता कि यह इस कार्य के लिए कैसे डिज़ाइन नहीं किया गया था। यद्यपि तथ्य यह है कि इस तरीके से इसका उपयोग करने के लिए प्रक्रिया बनाना संभव है, यह आकर्षक है।

उन प्रश्नों क्रमिक रूप से

निष्पादित किया जाएगा हां। प्राप्त किए गए क्रम में एसक्यूएल इंजन द्वारा प्रश्न निष्पादित किए जाएंगे। यद्यपि आपका कनेक्शन ऑब्जेक्ट शायद यह नहीं जानता कि कौन सा थ्रेड परिणाम पास कर देगा और आपको डरावनी 'ऑब्जेक्ट रेफरेंस त्रुटि' मिल जाएगी।

इस बात की संभावना है कि इस अलगाव स्तर अन्य प्रश्नों

हाँ करने के लिए लागू हो सकता है। यदि आप अपने SqlConnection को आवंटित लेनदेन ऑब्जेक्ट के अलगाव स्तर को बदलते हैं और फिर आपके थ्रेड में से एक उस कनेक्शन का उपयोग करने का प्रयास करता है तो यह डिफ़ॉल्ट रूप से अलगाव स्तर होगा। जब द्वितीयक धागा ऐसा करेगा, तो इस समय आपके नियंत्रण से बाहर हो जाएगा। आप प्रति आदेश एक लेनदेन असाइन कर सकते हैं (और इस प्रकार वांछित के रूप में एक अद्वितीय अलगाव स्तर प्राप्त करें) लेकिन आपको अभी भी कनेक्शन का मुद्दा थ्रेड सुरक्षित नहीं होगा।

संबंधित मुद्दे