در بخش های قبل اين مقاله به نقش اساسی Data Set در ارتباط با ذخيره و بازيابی داده اشاره گرديد . علاوه بر Data Set ، می توان دستوراتی را مستقيما" بر روی يک Connection بانک اطلاعاتی انجام داد . شی Connection سه متد زير را در ايـن رابطه ارائه نموده است :
ExecuteScalar : متد فوق ، يک Query را اجراء نموده و در ادامه صرفا" يک مقدار را بر می گرداند(نظير شمارش تعداد رکوردهای موجود در يک جدول بانک اطلاعاتی )
ExecuteNonQuery : متد فوق ، دستوراتی نظير INSERT,UPDATE و DELETE را که باعث اعمال تغييرات در بانک اطلاعاتی می گردند را اجراء نموده و تعداد سطرهای متاثر از اجرای دستور را برمی گرداند .
ExecuteReader : متد فوق ، باعث خواندن رکوردها ی موجود در بانک اطلاعاتی به صورت ترتيبی می گردد.
برای استفاده از متدهای فوق ، مراحل زير را دنبال می نمائيم :
ايجاد يک Connection با بانک اطلاعاتی
باز نمودن Connection
ايجاد يک شی Command شامل دستور SQL و يا Stored Procedure که می بايست اجراء گردد .
در بخش های قبل اين مقاله به نقش اساسی Data Set در ارتباط با ذخيره و بازيابی داده اشاره گرديد . علاوه بر Data Set ، می توان دستوراتی را مستقيما" بر روی يک Connection بانک اطلاعاتی انجام داد . شی Connection سه متد زير را در ايـن رابطه ارائه نموده است :
ExecuteScalar : متد فوق ، يک Query را اجراء نموده و در ادامه صرفا" يک مقدار را بر می گرداند(نظير شمارش تعداد رکوردهای موجود در يک جدول بانک اطلاعاتی )
ExecuteNonQuery : متد فوق ، دستوراتی نظير INSERT,UPDATE و DELETE را که باعث اعمال تغييرات در بانک اطلاعاتی می گردند را اجراء نموده و تعداد سطرهای متاثر از اجرای دستور را برمی گرداند .
ExecuteReader : متد فوق ، باعث خواندن رکوردها ی موجود در بانک اطلاعاتی به صورت ترتيبی می گردد.
برای استفاده از متدهای فوق ، مراحل زير را دنبال می نمائيم :
ايجاد يک Connection با بانک اطلاعاتی
باز نمودن Connection
ايجاد يک شی Command شامل دستور SQL و يا Stored Procedure که می بايست اجراء گردد .
اجرای متد مورد نظر در ارتباط با شی Command
بستن Connection ايجاد شده با بانک اطلاعاتی
برگرداندن يک مقدار از بانک اطلاعاتی در بخش دوم اين مقاله با نحوه اضافه نمودن و يا حذف سطرهائی از يک Data Set و بهنگام سازی بانک اطلاعاتی از طريق Data Set آشنا شديم . در اين رابطه لازم است به اين موضوع اشاره گردد که در برخی موارد لازم است که در ابتدا اطلاعاتی از بانک اطلاعاتی بازيابی و در ادامه رکورد مورد نظر به بانک اطلاعاتی اضافه گردد . ( بازيابی اطلاعات قبل از درج رکورد جديد در بانک اطلاعاتی ) . مثلا" زمانی که رکوردی دارای يک فيلد کليد منحصر بفرد می باشد ، نظير فيلد ID در بانک اطلاعاتی نمونه Contact ، لازم است در ابتدا يک مقدار منحصربفرد جديد برای هر رکورد اخذ و در ادامه رکورد مورد نظر را در بانک اطلاعاتی اضافه نمود . در اين رابطه می توان از روش های متعددی به منظور دريافت يک مقدار کليد منحصربفرد جديد ، استفاده نمود . ساده ترين روش در اين رابطه ، ايجاد يک شی Command و استفاده از متد ExecuteScalar به منظور برگرداندن يک مقدار می باشد . با توجه به نوع بانک اطلاعاتی می توان از دو نوع متفاوت اشياء Command استفاده نمود :
اشياء SqlCommand ، باعث اجرای دستورات بر روی يک Connection مربوط به بانک اطلاعاتی SQL می گردند .
اشياء OleDBCommand ، باعث اجرای دستورات بر روی يک Connection مربوط به بانک اطلاعاتی OLE می گردند .
کد زير تعداد رکوردهای موجود در جدول Orders را با استفاده از تابع Count برمی گرداند .
VB.NET ::Returning A value from a DataBase
Dim ordersCMD As SqlCommand = New SqlCommand("SELECT Count(*) FROM Orders", nwindConn)
Dim count As Int32 = CInt(ordersCMD.ExecuteScalar())
از متد ExecuteScalar ، می توان به همراه هر عبارت SQL که قادر به برگرداندن يک مقدار می باشد ، استفاده نمود .
تغيير رکوردهای موجود در يک بانک اطلاعاتی متد ExecuteNonQuery ،دستوراتی را اجراء می نمايد که يک Data Set را بر نمی گردانند (نظير دستورات INSERT , DELETE و يا UPDATE ) . به منظور اجرای دستوراتی اينچنين در ابتدا با استفاده از دستورات SQL و Connection مربوطه يک شی Command را ايجاد نموده و در ادامه می توان از متد ExecuteNonQuery مربوط به شی Command استفاده نمود. کد زير با اجرای دستور INSERT ، يک رکورد را در بانک اطلاعاتی با استفاده از ExecuteNonQuery درج می نمايد .
VB.NET ::Insert Record Directly in a DataBase
Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")
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()
متد ExecuteNonQuery از Connectionبانک اطلاعاتی استفاده نموده و در اين رابطه از Data Adapter و يا يک Data Set ، استفاده نمی شود.در صورتی که تغييراتی در يک جدول بانک اطلاعاتی با استفاده از متد فوق انجام شود ، می بايست Data Set مربوطه را که متاثر از تغييرات فوق می باشد را با فراخوانی متد Fill ، بهنگام نمود.
بازيابی رکوردها ی موجود در يک بانک اطلاعاتی متد 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 به منظور بازيابی اطلاعات از بانک اطلاعاتی را نشان می دهد .
VB.NET ::Retrieving Records Directly from DataBase
شی Data Reader ، شامل مجموعه ای از رکوردها با ويژگی Read-Forward بوده و متد Read تا زمانی که به انتهای مجموعه رکوردهای موجود در Data Reader نرسيده باشد ، اقدام به خواندن آنان می نمايد .