تبلیغات اینترنتیclose
ذخيره و بازيابی داده توسط ADO.NET (بخش ششم)
شبکه
وبلاگی برای برنامه نویسان و وبکاران
درباره وبلاگ


وبلاگی برای برنامه نویسان و وبکاران

آمار کاربران
نام کاربری :
رمز عبور :
ثبت نام عضو جدید
فراموشي رمز عبور

خبرنامه
جستجو
آمار وبلاگ
  • آنلاین : 1
  • بازدید امروز : 4
  • بازدید دیروز : 2
  • بازدید هفته گذشته : 6
  • بازدید ماه گذشته : 35
  • بازدید سال گذشته : 485
  • کل بازدید : 2926
  • کل مطالب : 9
  • نظرات : 0
  • رنک گوگل :

در بخش های قبل اين مقاله به نقش اساسی 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

<%@ Page Language="vb" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">
Private Sub Page_Load(ByVal Source As Object, ByVal E As EventArgs) 
 Dim sql As String = "SELECT * FROM Employees WHERE EmployeeID = "Request.QueryString("EmployeeID")
 Dim strConnection As String = ConfigurationSettings.AppSettings("NWind")
 Dim conn As New SqlConnection(strConnection)
 conn.Open() 
 Dim cmd As New SqlCommand(sql, conn)
 Response.Write("SQL: " & sql & "<br/>")
 Dim dr As SqlDataReader
 dr = cmd.ExecuteReader()
 Do While dr.Read()
   Response.Write(dr("FirstName").ToString & " " & dr("LastName").ToString)
 Loop
 conn.Close()
 End Sub
</script>
<html><head></head><body></body></html>

شی Data Reader ، شامل مجموعه ای از رکوردها با ويژگی  Read-Forward بوده و  متد Read  تا زمانی که به انتهای مجموعه رکوردهای موجود در 



نوع مطلب :
برچسب ها : ,

0       
چهارشنبه 3 ارديبهشت 1393
ابوالفضل ظهوریان