فوریه DataSet Object-قسمت 8 | اموزش طراحی سایت
بایکی دیگر از سری اموزش های طراحی وب سایت به زبان asp.net در خدمت شما هستیم.
برای عمليات Update ھم به ساگی با در دست داشتن انديس سطر مورد نظر و مقداردھی جديد به سطر ان کار تمام است:
table.Rows(3).Delete() GridView5.DataSource = ds.Tables("jj") GridView5.DataBind()
در اينجا سطر دوم جدول را انتخاب کرده و آن را به يک متغير از نوع DataRow خالی نسبت می دھيم.سپس کافی است اين متغير را از نو مقدار دھی کنيم.اين کار را نيز می توان يک سره انجام داد که در کش کمی مشکل تر است:
table.Rows(2).Item("e_id") = 3
برای Delete ھم کافی است از خاصيت Delete متد Tables.Rows استفاده کنيم.در زير ما سطر چھارم را پاک کرديم:
table.Rows(3).Delete() GridView5.DataSource = ds.Tables("jj") GridView5.DataBind()
نکته ای که تا اينجا بايد به خاطر بسپاری اين است که اعمال بالا به صورت يک سره ھم قابل انجام ھستند ھمانطور که بيان شد و شما ھم سعی کنيد آن ھا را يک سره انجام دھيد.مثلا عمل Update را به صورت زير انجام دھيد:
table.Rows(2).Item("e_fname") = "yadollah" table.Rows(2).Item("e_lname") = "akbari" GridView4.DataSource = ds.Tables("jj") GridView4.DataBind()
قبل از بحث چگونگی Update شدن DataBase بگذاريد با شی CommandBuilder آشنا شويم.اين شی ھمانطور که از نامش بر می آيد سازنده دستور است و چون در بحث Ado.NET مطرح شده سازنده ی دستورات عمومی Sql است. دستوراتی مثل Select-Update-Delete و….در مثال زير نمايش اين دستورات را می بينيم: ابتدا کد ھای عمومی کار:
Dim cs As String = ConfigurationManager.ConnectionStrings("aaa").ConnectionString Dim con As New SqlConnection(cs) Dim qs As String = "SELECT * FROM jj" Dim adp As New SqlDataAdapter(qs, con)
سپس شی از نوع SqlCommandBuilder تعريف می کنيم ھمانطور که می بينيد new کردن آن مستلزم ورودی از نوع Dataadapter است تا ھم به Query String ان دسترسی داشته باشد و ھم به Connection آن تا بتواند دستورات را بسازد:
Dim cm As New SqlCommandBuilder(adp)
به متد ھای SelectCommand-DeleteCommand-InsertCommand شی SqlDataAdapter نيز بايد توجه شود. حالا برای توليد دستورا ت از متد Get شی SqlCommandBuilder استفاده میکنيم:
adp.InsertCommand = cm.GetInsertCommand adp.DeleteCommand = cm.GetDeleteCommand adp.UpdateCommand = cm.GetUpdateCommand
و برای نمايش به صورت زير عمل می کنيم:
Response.Write(adp.InsertCommand.CommandText & "<br>") Response.Write(adp.DeleteCommand.CommandText & "<br>") Response.Write(adp.UpdateCommand.CommandText & "<br>")
اين کد ھا با توجه به Query String که مطرح شد دستورات مبنی بر Insert کردن و به روز يا حذف کردن جدول jj را توليد می کند زيرا وقتی شی SqlCommandBuilder تعريف شد و يک شی از نوع DataAdapter آرگومان ورودی تابع سازنده ی آن شد, اين شی به جدول مربوطه در پايگاه داه دسترسی دارد چون شی DataAdapter ھنم به رشته ی اتصال و ھم به QueryString ما دسترسی دارد پس می تواند با توجه به ستون ھای ان و عوامل ديگر کد ھای مربوزه را توليد کند. حتما از خود می پرسيد چرا اول ھمه ی دستورات توليد شده را در متد ھای شی SqlDataAdapter قرار داده ايم وسپس آن ھا را به وسيله ی متد ھای شی SqlDataAdapter چاپ کرديم.در حاليکه ميشد يک راست به صورت زير عمل کنيم:
Response.Write(cm.GetInsertCommand.CommandText & "<br>") Response.Write(cm.GetDeleteCommand.CommandText & "<br>") Response.Write(cm.GetUpdateCommand.CommandText & "<br>")
پاسخ اين سوال کاملا واضح است.ما اين دستورات را توليد می کنيم تا در شی SqlDataAdapter از آن ھا استفاده کنيم مثلا ھر وقت برنامه نياز به Update شدن داشت به متد UpdateCommand از شی SqlDataAdapter رجوع شود.حال وقتی به ان رجوع شود بايد دستوری در آن باشد ديگر.پس نياز به اين داريم که ابتدا Command ھای توليد شده را درون متد ھای شی SqlDataAdapter قرار دھيم و سپس آن ھا را چاپ کنيم. حالا می ماند Update کردن DataSet که تغييرات مختلفی را روی آن انجام داديم.برای اين کار از متد Update شی DataAdapter استفاده می کنيم که 2 آرگومان ورودی دارد يکی نام که مثلا تغييراتی مثل اضافه کردن سطر جديد-تغييرات در آن-حذف يک سطر رويش اعمال شده و ديگری نام جدولی که در پايگاه داده است و اين تغييرات بايد رويش اعمال شود.دقت کنيد اين متد بدون وجود دستورات مربوطه اين کار ھا را نمی کند که ما اين دستورات را با CommandBuilder توليد به متد ھای نظيرش در شی DataAdapter قرار داديم.اگر بدون انھا کد زير را بنويسيد ھيچ تغييری در پايگاه داده رخ نمی دھد: کد کامل تغييرات روی DataSet و اعمال آن به پايگاه داده ی اصلی را می بينيد:
Imports System.Data Imports System.Data.sqlclient Partial Class Default4 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cs As String Dim qs As String Dim con As SqlConnection Dim ds As DataSet Dim adap As SqlDataAdapter cs = ConfigurationManager.ConnectionStrings("aaa").ConnectionString con = New SqlConnection(cs) qs = "Select * From jj" adap = New SqlDataAdapter(qs, con) ds = New DataSet adap.Fill(ds, "jj") GridView1.DataSource = ds.Tables("jj") GridView1.DataBind() '////////////////////// '////////////////////// Dim NewRow As DataRow Dim NewRow1 As DataRow Dim table As DataTable table = ds.Tables("jj") NewRow = table.NewRow NewRow.Item("e_id") = 11 NewRow.Item("e_fname") = "ahmad" NewRow.Item("e_lname") = "rezaali" NewRow1 = table.NewRow NewRow1.Item("e_id") = 12 NewRow1.Item("e_fname") = "shahla" NewRow1.Item("e_lname") = "mosadegh" table.Rows.Add(NewRow1) table.Rows.Add(NewRow) GridView2.DataSource = ds.Tables("jj") GridView2.DataBind() '////////////////////// '////////////////////// table.Rows(2).Item("e_fname") = "yadollah" table.Rows(2).Item("e_lname") = "akbari" GridView4.DataSource = ds.Tables("jj") GridView4.DataBind() '////////////////////// '////////////////////// table.Rows(3).Delete() GridView5.DataSource = ds.Tables("jj") GridView5.DataBind() '////////////////////// '////////////////////// Dim cm As New SqlCommandBuilder(adap) adap.InsertCommand = cm.GetInsertCommand adap.DeleteCommand = cm.GetDeleteCommand adap.UpdateCommand = cm.GetUpdateCommand Response.Write(adap.InsertCommand.CommandText & "<br>") Response.Write(adap.DeleteCommand.CommandText & "<br>") Response.Write(adap.UpdateCommand.CommandText & "<br>") adap.Update(ds, "jj") End Sub End Class
ھمه ی تغييرات مرحله به مرحله ھر يک در يک GridView نمايش داده شده اند.نکته ھايی که می ماند اين است که شی CommandBuilder مورد پسند برنامه نويسان نيست چون ان ھا را به راحت طلبی وادار می کند ھمانطور که ديديد خودش کد توليد می کرد ولی کد ھای ساده! در کل برای سناريو ھای پيچيده نمی توان از CommandBuilder استفاده کرد و بايد تنبلی را کنار گذاشت و خود دست به کار شد و کد ھای Sql نوشت.اگر دلتان نخواست که ازCommandBuilder استفاده کنيد کافی است جلوی خواصی ھمچون adap.InsertCommand خودتان دستی کد بنويسيد:
adap.InsertCommand = "INSERT INTO jj VALUES(2,'hamed','haghani')"
درک کد ھای توليد شده توسط CommandBuilder نيز ساده است کافی است در مثال CommandBuilder درک کد ھای توليد شده توسطبالا که آن ھا را نمايش داديم, کمی به کد ھای توليد شده بنگريد.در کل سعی کنيد ھنگامی که می خواھيد تغييرات انبوھی در پايگاه داده بدھيد از شی DataSet استفاده کنيد ولی اگر تغييرات اندک ھستند از ھمان روش ھای قبلی استفاده کنید.
برای سفارش طراحی وب سایت با ما تماس بگیرید.
دیدگاهتان را بنویسید