هل إغلاق اتصال قاعدة البيانات في طريقة تخلص هو الصحيح؟
-
06-07-2019 - |
سؤال
ولقد كان الشك أن اتصال قاعدة البيانات المستخدمة في واحدة من التطبيقات لدينا ليست دائما مغلقة. ذهبت لرؤية رمز ولقد وجدت 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 أو لا، الاتصال الأساسي إلى الملقم مغلقة.
اقتباس فقرة>