آموزش کامپیوتر

آموزش گام به گام کامپیوتر

آموزش کامپیوتر

آموزش گام به گام کامپیوتر

ارتباط به منابع داده در ADO.NET

ارتباط  به منابع داده در 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

تعریف و نمونه سازی یک شی جدید 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

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد