ذخيره و بازيابی داده توسط ADO.NET (بخش ششم) آنچه تاکنون گفته شده است : در بخش های قبل اين مقاله به نقش اساسی Data Set در ارتباط با ذخيره و بازيابی داده اشاره گرديد . علاوه بر Data Set ، می توان دستوراتی را مستقيما" بر روی يک Connection بانک اطلاعاتی انجام داد . شی Connection سه متد زير را در ايـن رابطه ارائه نموده است : ExecuteScalar : متد فوق ، يک Query را اجراء نموده و در ادامه صرفا" يک مقدار را بر می گرداند(نظير شمارش تعداد رکوردهای موجود در يک جدول بانک اطلاعاتی ) ExecuteNonQuery : متد فوق ، دستوراتی نظير INSERT,UPDATE و DELETE را که باعث اعمال تغييرات در بانک اطلاعاتی می گردند را اجراء نموده و تعداد سطرهای متاثر از اجرای دستور را برمی گرداند . ExecuteReader : متد فوق ، باعث خواندن رکوردها ی موجود در بانک اطلاعاتی به صورت ترتيبی می گردد. برای استفاده از متدهای فوق ، مراحل زير را دنبال می نمائيم : برگرداندن يک مقدار از بانک اطلاعاتی کد زير تعداد رکوردهای موجود در جدول Orders را با استفاده از تابع Count برمی گرداند . VB.NET ::Returning A value from a DataBase Dim ordersCMD As SqlCommand = New SqlCommand("SELECT Count(*) FROM Orders", nwindConn) از متد ExecuteScalar ، می توان به همراه هر عبارت SQL که قادر به برگرداندن يک مقدار می باشد ، استفاده نمود . تغيير رکوردهای موجود در يک بانک اطلاعاتی VB.NET ::Insert Record Directly in a DataBase Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind") متد ExecuteNonQuery از Connection بانک اطلاعاتی استفاده نموده و در اين رابطه از Data Adapter و يا يک Data Set ، استفاده نمی شود.در صورتی که تغييراتی در يک جدول بانک اطلاعاتی با استفاده از متد فوق انجام شود ، می بايست Data Set مربوطه را که متاثر از تغييرات فوق می باشد را با فراخوانی متد Fill ، بهنگام نمود. بازيابی رکوردها ی موجود در يک بانک اطلاعاتی VB.NET ::Retrieving Records Directly from DataBase <%@ Page Language="vb" %> شی Data Reader ، شامل مجموعه ای از رکوردها با ويژگی Read-Forward بوده و متد Read تا زمانی که به انتهای مجموعه رکوردهای موجود در Data Reader نرسيده باشد ، اقدام به خواندن آنان می نمايد .
در بخش دوم اين مقاله با نحوه اضافه نمودن و يا حذف سطرهائی از يک Data Set و بهنگام سازی بانک اطلاعاتی از طريق Data Set آشنا شديم . در اين رابطه لازم است به اين موضوع اشاره گردد که در برخی موارد لازم است که در ابتدا اطلاعاتی از بانک اطلاعاتی بازيابی و در ادامه رکورد مورد نظر به بانک اطلاعاتی اضافه گردد . ( بازيابی اطلاعات قبل از درج رکورد جديد در بانک اطلاعاتی ) . مثلا" زمانی که رکوردی دارای يک فيلد کليد منحصر بفرد می باشد ، نظير فيلد ID در بانک اطلاعاتی نمونه Contact ، لازم است در ابتدا يک مقدار منحصربفرد جديد برای هر رکورد اخذ و در ادامه رکورد مورد نظر را در بانک اطلاعاتی اضافه نمود . در اين رابطه می توان از روش های متعددی به منظور دريافت يک مقدار کليد منحصربفرد جديد ، استفاده نمود . ساده ترين روش در اين رابطه ، ايجاد يک شی Command و استفاده از متد ExecuteScalar به منظور برگرداندن يک مقدار می باشد . با توجه به نوع بانک اطلاعاتی می توان از دو نوع متفاوت اشياء Command استفاده نمود :
Dim count As Int32 = CInt(ordersCMD.ExecuteScalar())
متد ExecuteNonQuery ،دستوراتی را اجراء می نمايد که يک Data Set را بر نمی گردانند (نظير دستورات INSERT , DELETE و يا UPDATE ) . به منظور اجرای دستوراتی اينچنين در ابتدا با استفاده از دستورات SQL و Connection مربوطه يک شی Command را ايجاد نموده و در ادامه می توان از متد ExecuteNonQuery مربوط به شی Command استفاده نمود. کد زير با اجرای دستور INSERT ، يک رکورد را در بانک اطلاعاتی با استفاده از ExecuteNonQuery درج می نمايد .
nwindConn.Open()
Dim insertStr As String = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')"
Dim insertCMD As SqlCommand = New SqlCommand(insertStr, nwindConn)
Dim recordsAffected As Int32 = insertCMD.ExecuteNonQuery()
متد ExecuteReader دستوراتی را که باعث برگرداندن رکوردهائی می شوند ، اجراء می نمايد. ( نظير يک عبارت SQL SELECT ) .هر رکورد به عنوان يک شی Data Reader برگردانده می شود. که نوع خاصی از يک Data Set و با ويژگی فقط خواندنی است . با توجه به اينکه متد ExecuteReader مستقيما" بر روی Connection بانک اطلاعاتی عمل خواهد نمود ، دو نوع ( نسخه ) متفاوت از شی Data Reader وجود دارد : OleDbDataReader و SqlDataReader .
استفاده از متد ExecuteReader برای ايجاد اشياء Data Reader ، دارای کارائی بمراتب بهتری در مقايسه با ايجاد Data Set از يک Data Adapter بوده ( در هر لحظه يک سطر در حافظه مستقر می گردد ) ولی انعطاف پذيری آن کمتراست. اشياء Data Reader ، به صورت فقط خواندنی بوده و امکان خواندن رکوردها بصورت ترتيبی و صرفا" به سمت جلو( Forward ) وجود خواهد داشت ( هر لحظه يک رکورد ) . با استفاده از Data Set ، امکان دريافت رکوردهای بمراتب بيشتری با هر نوع اولويت وجود داشته و در ادامه می توان پس از اعمال تغييرات آنان را مجددا" در بانک اطلاعاتی درج نمود .
کد زير ، نحوه استفاده از متد ExecuteReader به منظور بازيابی اطلاعات از بانک اطلاعاتی را نشان می دهد .
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
نظرات شما عزیزان: