ارتباط به منابع داده در ADO.NET ( بخش سوم )
در بخش اول اين مقاله به تشريح انواع Data Provider و در بخش دوم با نحوه ايجاد يک Connection آشنا شديم . در اين بخش به بررسی نحوه مديريت يک Connection خواهيم پرداخت .
پس از تعريف خصلت ConnectionString مربوط به شی Connection ، می توان با استفاده از متدهای Close و Open ، مديريت وضعيت Connection جاری را انجام داد . در ادامه با نحوه استفاده از متدهای فوق و پاسخگوئی به رويدادهای Connection آشنا خواهيم شد.
فعال نمودن و غير فعا ل نمودن يک Connection
بمنظور فعال نمودن و يا غير فعال نمودن يک Connection می توان بصورت تلويحی عمليات فوق را با فراخوانی متدهای يک شی که از Connection استفاده می نمايند انجام و يا با صراحت و بکمک متدهای Open و يا Close اقدام به فعال نمودن و يا غير فعال نمودن Connection نمود . متدهای Open و Close دو متد اوليه برای هر Connection می باشند .

  • متد Open با استفاده از اطلاعات موجود در خصلت ConnectionString ، با يک منبع داده ارتباط و يک ارتباط فعال شده را ايجاد خواهد کرد .
  • متد Close باعث غير فعال شدن Connection می گردد .

لازم است به اين نکته اشاره گردد که بستن ( غير فعال نمودن ) يک Connection امری لازم و ضروری است ، چراکه اکثر منابع داده صرفا" تعداد محدودی از ارتباطات فعال را حمايـت نموده و در ضمن ارتباطات فعال ، منابع با ارزش سيستم را اشغال و حجم عملياتی بر روی سيستم را افزايش خواهند داد .
فعال نمودن و غير فعال نمودن صريح يک Connection
استفاده صريح از متدهای Open و Close بمنظور فعال نمودن و يا غير فعال نمودن Connection توصيه و دارای مزايای زير است :

  • کد نوشته شده دارای خوانائی بمراتب بيشتری خواهد بود .
  • اشکال زدائی برنامه ها با سرعت مطلوبی انجام خواهد شد .
  • موثرتر می باشد.

پس از استفاده Connection ، لازم است که ارتباط ايجاد شده غير فعال گردد . بدين منظور، می توان از متدهای Close و يا Dispose مربوط به شی Connection استفاده نمود. متد Close ، تراکنش های بلاتکليف را تعيين تکليف نموده و در ادامه ارتباط را غير فعال می نمايد . در موارديکه Pooling فعال شده باشد ، متد فوق باعث آزادسازی ارتباط ايجاد شده از Connection pool می گردد . فراخوانی متد Close توسط يک برنامه می تواند چندين مرتبه صورت پذيرد.
فعال نمودن و غير فعال نمودن تلويحی يک Connection
در صورت استفاده از DataAdapters ، ضرورتی به فعال نمودن و يا غير فعال نمودن يک Connection وجود نخواهد داشت . زمانيکه يکی از متدهای مربوط به اشياء فوق ، فراخوانده می گردد ( مثلا" متد Update و يا Fill مربوط به شی SqlDataAdapter ) ، متد مورد نظر بررسی لازم در خصوص فعال بودن ارتباط را انجام و در صورتيکه ارتباط فعال نشده باشد ، SqlDataAdapter ارتباط را فعال و پس از انجام عمليات مورد نظر ، ارتباط را غير فعال خواهد نمود .

مثال : در صورتيکه يک DataSet داده خود را از چندين جدول متفاوت که در بانک اطلاعاتی مشابه قرار دارند ، دريافت می نمايد ،صرفا" يک Connection وجود داشته و دارای چندين DataAdapters خواهيم بود (هر DataAdapters مرتبط با يک جدول ) . در صورتيکه Connection بصورت تلويحی ( عدم استفاده صريح از متدهای Open و Close ) فعال و يا غير فعال گردد ، در زمان پر نمودن اطلاعات در Dataset ، ارتباط با منبع داده چندين مرتبه فعال و يا غير فعال خواهد شد . در چنين مواردی مناسب است که در ابتدا Connection با صراحت فعال و پس از فراخوانی متدهای Filling مربوط به چندين DataAdapters ، ارتباط ايجاد شده با منبع داده را با بکارگيری متد Close و باصراحت غير فعال نمود .
استفاده از متد Dispose
زمانيکه يک Connection غيرفعال می گردد ، جريان اطلاعات به و يا از منبع داده غير فعال می گردد. در چنين حالتی ، منابع غيرمديريت يافته استفاده شده توسط شی Connection ، آزاد نخواهند گرديد.در صورتيکه Connection pooling فعال شده باشد ، عمليات آزاد سازی Connection از Pool نيز انجام خواهد شد. اشياء SqlConnection و OleDbConnection دارای يک متد Dispose بوده که از آن بمنظور آزادسازی منابع غيرمديريت يافته استفاده می گردد . با فراخوانی متد Dispose ، عمليات حذف Connection از Connection pool نيز انجام خواهد شد .

مثال : استفاده از متد Dispose
در مثال زير، يک شی SqlConnection ايجاد و در ادامه با استفاده از متد Open فعال و سپس بمنظور غيرفعال نمودن Connection و آزاد سازی منابع استفاده شده توسط Connection از متد Dispose استفاده و در نهايت شی مورد نظر به Nothing مقداردهی شده است .

نحوه استفاده از متد Dispose
کد:
لینک و متن درون کدها فقط برای کسانی که ثبت نام کرده اند قابل مشاهده است
اگر تا کنون در سایت ثبت نام نکرده اید با کلیک بر روی این قسمت ثبت نام کنید
Only Registered Users Can See Links


برخورد با رويدادهای Connection
رويداد StateChange زمانی که وضعيت Connection تغيير نمايد ، محقق می گردد( وضعيت Connection از فعال به غير فعال و يا از غير فعال به فعال تبديل گردد) .بمنظور برخورد مناسب با هر يک از رويدادها ، از يک Event handler استفاده می گردد. هر رويداد دارای Event handler مختص خود می باشد. Event handler مربوط به رويداد StateChange ، متدی است که دارای آرگومانی از نوع StateChangeEventArgs می باشد . آرگومان فوق، شامل داده مرتبط با رويداد است .

رويداد StateChange
نوع NET data provider . ، که از آن استفاده می گردد ، آرگومان های خاص مربوط به رويداد StateChange را مشخص می نمايد :

  • رويداد SqlConnection.StateChange برای يک شی SqlConnection
  • رويداد OleDbConnection.StateChange برای يک شی OleDbConnection

لازم است بدين نکته اشاره گردد که تمامی رويدادها در دات نت دارای دو پارامتر زير می باشند :
  • ارسال کننده ( از نوع شی )
  • e از نوع XxxEventArgs

برای رويداد StateChange ، پارامتر e از نوع StateChangeEventArgs می باشد.
event handler مربوط به دو رويداد فوق ، نوع مشابهی از آرگومان ها را دريافت می نمايد : StateChangeEventArgs که شامل داده مرتبط با اين رويداد است . جدول زير خصلت های مربوط به کلاس StateChangeEventArgs را نشان می دهد :

شرح
خصلت
خصلت فوق ، وضعيت جديد Connection را مشخص می نمايد. زمانيکه رويداد محقق گردد، شی Connection همواره در يک وضعيت جديد خواهد بود .
CurrentSatate
وضعيت اوليه Connection را برمی گرداند .
OriginalSate
نمونه ای از يک Event Handler مربوط به StateChange
مثال زير نحوه ايجاد StateChangeEventHandler را با VB.NET ، نشان می دهد :

نحوه استفاده ازيک Event Handler با استفاده از VB.NET
کد:
لینک و متن درون کدها فقط برای کسانی که ثبت نام کرده اند قابل مشاهده است
اگر تا کنون در سایت ثبت نام نکرده اید با کلیک بر روی این قسمت ثبت نام کنید
Only Registered Users Can See Links