هل إغلاق اتصال قاعدة البيانات في طريقة تخلص هو الصحيح؟

StackOverflow https://stackoverflow.com/questions/1016800

سؤال

ولقد كان الشك أن اتصال قاعدة البيانات المستخدمة في واحدة من التطبيقات لدينا ليست دائما مغلقة. ذهبت لرؤية رمز ولقد وجدت DataProvider الفئة التي تمت SqlConnection الكائن. يتم فتح الاتصال في منشئ هذه الفئة وأغلق في انها طريقة Dispose (لا حكم ذلك، وأنا أعلم الحفاظ على اتصال مفتوح هو الشر، انها مجرد ليس لي رمز وانها ليست وجهة السؤال على أي حال). يتم تطبيق طريقة Dispose مثل هذا:

protected virtual void Dispose(bool disposing)
{
    if (!_disposed)
    {
        if (disposing)
        {
            if (_conn != null)
                _conn.Close();
        }

        _disposed = true;
    }
}

والسؤال هو:
أنها لا تضمن دائما أن الاتصال يتم إغلاق منتديات هل هذا صحيح الرمز؟

وأعتقد ينبغي أن يكون هناك _conn.Dispose() يسمى - هل أنا على حق، ويمكن أن تؤثر لا إغلاق اتصال (وربما لا)

هل كانت مفيدة؟

المحلول

وأبدا يسمى تخلص تلقائيا.

ولن يتم إغلاق الاتصال حتى يتم استدعاء أسلوب التخلص من وجوه الخاص بك بشكل واضح، أو إذا صفك في استخدامها في استخدام كتلة ()

وهناك طريقة أكثر أمنا لاستدعاء أسلوب التصرف في finalizer الخاص بك، وضمان finalizer يتم قمع عندما يتم استدعاء الأسلوب التخلص.

هذه المقالة تقديم الطريقة الصحيحة لتنفيذ نمط

ونأمل أن يساعد!

وسيدريك

نصائح أخرى

سوف

وconn.Dispose(); أيضا إغلاق الاتصال، لذلك لا يمكن أن يصب تغييرها إلى اتباع نمط التصرف.

ولكن ما يعادل وظيفيا لذلك يجب أن تكون هناك مشكلة آخر هناك مكان.

http://msdn.microsoft كوم / EN-US / مكتبة / system.data.sqlclient.sqlconnection.close.aspx

<اقتباس فقرة>   

إذا يذهب SqlConnection من   نطاق، لن يتم إغلاقه. وبالتالي،   يجب إغلاق صراحة   الاتصال عن طريق استدعاء إغلاق أو   تخلص. إغلاق وتخلص ل   أي ما يعادل وظيفيا. إذا كان   اتصال قيمة تجميع تجميع هو   مجموعة إلى true أو نعم، والكامنة   يتم إرجاع اتصال مرة أخرى إلى   تجمع الاتصال. من ناحية أخرى، إذا   ومن المقرر تجميع إلى false أو لا،   الاتصال الأساسي إلى الملقم   مغلقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top