دهلران پی سی
سایت جامع علمی ,آموزشی,فرهنگی و تفریحی

در بخش اول اين مقاله به  تشريح انواع  Data Provider  و در بخش دوم  با  نحوه ايجاد يک Connection آشنا شديم . در اين بخش به  بررسی نحوه مديريت يک Connection خواهيم پرداخت .

پس از تعريف خصلت ConnectionString مربوط به  شی Connection ، می توان  با استفاده از متدهای Close و Open ، مديريت وضعيت Connection جاری را انجام داد . در ادامه با نحوه استفاده از متدهای فوق و  پاسخگوئی به رويدادهای Connection آشنا خواهيم شد.

فعال نمودن و غير فعا ل نمودن يک  Connection
بمنظور فعال نمودن و يا غير فعال نمودن يک Connection  می توان بصورت تلويحی عمليات فوق را با فراخوانی متدهای يک شی که از Connection استفاده می نمايند انجام و يا با صراحت و بکمک متدهای Open و يا Close اقدام به فعال نمودن و يا غير فعال نمودن Connection نمود . متدهای Open و Close  دو متد اوليه برای هر Connection می باشند .

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

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


در بخش اول اين مقاله به  تشريح انواع  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

تعريف و نمونه سازی يک شی جديد SqlConnection  '

Dim cnNorthwind AS New  System.Data.SqlClient.SqlConnection ()

مقدار دهی مناسب خصلت ConnectionString  '

cnNorthwind.ConnectionString = "Data Source="(Local); " & _

"Initial Catalog = Northwind;" & _

"Integrated Security=SSPI;"

فعال نمودن Connection '

cnNorthwind.open()

انجام عمليات دلخواه  و مرتبط با بانک اطلاعاتی   '
 
بستن Connection  که باعث آزاد سازی آن از Connection Pool  '
بر روی سرويس دهنده می گردد .'

cnNorthwind.Close()

Dispose نمودن ارتباط که باعث حذف connection از connection pool بر روی ' سرويس دهنده می گردد ، ذخيره سازی  منابع سرويس دهنده  '

cnNortwind.Dispose()

 آزاد سازی حافظه اشغال شده توسط شی SqlConnection '

cnNorthwind = Nothing  

برخورد با رويدادهای 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

Private Sub cnNorthwind_State ( ByVal Sender As Object , ByVal e As                  System.Data.StateChangeEventArgs) Handles cnNorthwind.StateChange

نمايش وضعيت اوليه و جاری State  در يک messagebox  '
 زمانی که وضعيت Connection تغيير می نمايد '

MessageBox.Show("CurrentState:   "& e.Currentstate.ToString() & vbCrLF & _       "OriginalState :   " & e.OriginalState.ToString() , _
"cn.Northwind.StateChange" , _ 
  MessageBoxButtons.OK,_
  MessageBoxIcon.Information)
End Sub

در بخش چهارم اين مقاله  به بررسی  Connection Exceptions  ، خواهيم پرداخت .




تاریخ: یکشنبه 26 خرداد 1392
ارسال توسط dlp

ورود کاربران

خوش آمدید! لطفا وارد حساب خود شوید

رمز عبور را فراموش کرده‌اید؟
حساب کاربری ندارید؟

فراموشی رمز عبور

نام کاربری یا ایمیل خود را وارد کنید

یا

ثبت نام کاربران

در چند ثانیه حساب کاربری خود را بسازید

قبلا ثبت نام کرده‌اید؟

نظرات کاربران

دیدگاه خود را با ما در میان بگذارید