سؤال

ما هي الطريقة الصحيحة لإغلاق فقي بعد تشغيل استعلام مقابل قاعدة بيانات MySQL من نموذج Windows في C#؟

هل مفتوح بسيط بما يكفي مثل هذا؟

conn.Open();

//querycode

conn.Close():
هل كانت مفيدة؟

المحلول

حاول استخدام:

using(MySqlConnection conn = new MySqlConnection(connString))
{
    conn.Open();
} // conn is automatically closed and disposed at the end of the using block

نصائح أخرى

لا بأس في الطريقة التي تقوم بها ، يمكنك أيضًا لف كائن الاتصال في using كتلة مثل هذا:

using (var con = new MySqlConnection(/*connection string*/))
{
    con.Open();
    //do stuff
    // con.Close(); //don't need this it will be closed automatically* 
}

(*نرى)

لا ، الرمز في سؤالك ليس جيدًا بما فيه الكفاية. إذا ألقي استفسارك استثناء ، فلن تغلق () في الوقت المناسب وسيتم تركه معلقًا حتى يلاحظه جامع القمامة.

تحتاج إلى إرفاق الكائن في using قم بحظر كما هو موضح من قبل الآخرين أو عند الحد الأدنى العاري في بنية المحاولة/أخيرًا.

الفصول التي تستخدم الموارد التي تحتاجها لتنظيف بعد ذلك عادة ما تنفذ idisposable واجهه المستخدم. هذا يعني أنه يوفر وظيفة تسمى Dispose () يمكن استخدامها لتحرير الموارد.

للكائنات التي يمكن التخلص منها ، يمكنك استخدام استخدام بيان:

using ( SomeDisposableClass c = new SomeDisposableClass() ) {

    // ... your code here

} // c.Dispose() automatically called here, freeing up resources

إذا تم ترميز الفئة بشكل صحيح ، فيجب أن تحرر أي موارد - سواء كان ذلك اتصال قاعدة بيانات ، ومقبض الملف المفتوح ، وما إلى ذلك - في وظيفة Dispose ().

هذا يعني أن MySQL ربما ينفصل عن قاعدة البيانات في Dispose () ، لذلك ربما لا تحتاج إلى استدعاء C.Close () بشكل صريح - ولكن تحقق دائمًا من الوثائق للتأكد.

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