के भीतर भी बंद नहीं किया जा रहा है कृपया मदद करें!.net SqlConnection किसी भी {{
पृष्ठभूमि की जानकारी
मैं एक WPF आवेदन जो एक SQL सर्वर 2005 डेटाबेस तक पहुँचता है। डेटाबेस उस मशीन पर स्थानीय रूप से चल रहा है जिस पर एप्लिकेशन चल रहा है।
हर जगह मैं लिंक डेटाकॉन्टेक्स्ट का उपयोग करता हूं, मैं एक {{} कथन का उपयोग करता हूं, और एक फ़ंक्शन के परिणामस्वरूप पास करता हूं जो एक SQLLonnection ऑब्जेक्ट देता है जिसे खोला गया है और डेटाकॉन्टेक्स्ट कन्स्ट्रक्टर पर लौटने से पहले इसका उपयोग कर SQLLommand निष्पादित किया गया था .. अर्थात
// In the application code
using (DataContext db = new DataContext(GetConnection()))
{
... Code
}
जहां getConnection इस तरह दिखता है (मैं समारोह से 'फुलाना' यह अधिक पठनीय बनाने के लिए बाहर छीन लिया गया है, लेकिन वहाँ कोई अतिरिक्त कार्यक्षमता है कि याद आ रही है है)।
// Function which gets an opened connection which is given back to the DataContext constructor
public static System.Data.SqlClient.SqlConnection GetConnection()
{
System.Data.SqlClient.SqlConnection Conn = new System.Data.SqlClient.SqlConnection(/* The connection string */);
if (Conn != null)
{
try
{
Conn.Open();
}
catch (System.Data.SqlClient.SqlException SDSCSEx)
{
/* Error Handling */
}
using (System.Data.SqlClient.SqlCommand SetCmd = new System.Data.SqlClient.SqlCommand())
{
SetCmd.Connection = Conn;
SetCmd.CommandType = System.Data.CommandType.Text;
string CurrentUserID = System.String.Empty;
SetCmd.CommandText = "DECLARE @B VARBINARY(36); SET @B = CAST('" + CurrentUserID + "' AS VARBINARY(36)); SET CONTEXT_INFO @B";
try
{
SetCmd.ExecuteNonQuery();
}
catch (System.Exception)
{
/* Error Handling */
}
}
return Conn;
}
मुझे नहीं लगता कि आवेदन एक WPF एक होने के मुद्दे को मैं कर रहा हूँ पर कोई प्रभाव पड़ता है है।
मुद्दा मैं
SqlConnection के बावजूद हो रहा है Sql सर्वर प्रबंधन स्टूडियो मैं अभी भी साथ खुले कनेक्शनों का भार देख सकते में DataContext के साथ निपटाया जा रहा है:
status : 'Sleeping'
command : 'AWAITING COMMAND'
last SQL Transact Command Batch : DECLARE @B VARBINARY(36); SET @B = CAST('GUID' AS VARBINARY(36)); SET CONTEXT_INFO @B
अंततः कनेक्शन पूल का उपयोग किया जाता है और आवेदन जारी नहीं रह सकता है।
तो मैं केवल यह निष्कर्ष निकाल सकता हूं कि किसी भी तरह Context_Info सेट करने के लिए SQLCommand को चलाने का अर्थ यह है कि डेटा कॉन्टेक्स्ट का निपटारा होने पर कनेक्शन का निपटारा नहीं किया जाता है।
क्या कोई भी इस बात को स्पष्ट कर सकता है कि कनेक्शन को बंद होने से रोक दिया जाएगा और जब डेटाकॉन्टेक्स्ट का उपयोग किया जाता है तो इसका निपटारा किया जाता है?
आप स्वत: जेनरेट किए गए डेटा-संदर्भ को विस्तारित करने के लिए केवल आंशिक कक्षा जोड़ सकते हैं; subclass करने की कोई ज़रूरत नहीं है। –