مقدمه :

یکی از مهمترین عملیات هایی که باید در یک پایگاه داده انجام شود ، ویرایش و به روز رسانی ( Update ) اطلاعات است . داده ها در یک پایگاه داده به صورت مداوم در حال تغییر و یا حذف و اضافه شدن هستند و کاربری که با یک پایگاه داده کار می کند ، باید توانایی آن را داشته باشد که در زمان های مورد نظر بتواند داده های تغییر یافته را ویرایش کرده و آنها را حذف و یا اضافه کند .
کنترل SqlDataSource از تمامی عملیات های ذکر شده به طور کامل پشتیبانی کرده و امکانات گسترده ای را برای ویرایش و یا حذف و اضافه کردن داده ها به کاربر می دهد . ویرایش و به روز رسانی اطلاعات با استفاده از کنترل SqlDataSource را در این بخش و حذف و یا اضافه کردن اطلاعات را در بخش بعدی آموزش خواهیم داد .
به طور کلی ۲ روش برای انجام عملیات ویرایش داده در کنترل SqlDataSource وجود دارد :

ویرایش اطلاعات با استفاده از ترکیب یک کنترل SqlDataSource با یک کنترل داده وب که برای نمایش اطپلاعات به کار می روند مثل GridView , DetailsView و یا FormView : کنترل های داده وب به کنترل های سرور داده از جمله SqlDataSource متصل شده و اطلاعات بانک های اطلاعاتی رابه صورت جدول وار و مرتب در سطر و ستون ها نمایش می دهند . چنانچه در این کنترل ها مقدار خاصیت ShowEditButton را بر روی True تنظیم کنید ، یک گزینه Edit به انتدای هر سطر جدول ( رکورد ) اضافه شده که با کلیک بر روی آن گزینه ، خانه های آن سطر جدول در حالت ویرایش ( EditMode ) قرار گرفته و به صورت کادرهای متن قابل ویرایش در می آیند . سپس کاربر می تواند مقادیر آن کنترل ها را تغییر داده و با کلیک بر روی گزینه Update ( که تغییر یافته همان Edit است ) تغییرات صورت گرفته را در جدول اعمال کند . استفاده از این کنترل ها را به صورت کامل در بخش کنترل های داده وب ، آموزش خواهیم داد و در این بخش روش دوم را بررسی می کنیم .
استفاده مستقیم از کنترل SqlDataSource و به کار بردن متد Uodate آن : در این حالت کنترل SqlDataSource به صورت مستقیم و بدون استفاده از یک کنترل وب واسط مثل GridView و یا DetailsView که در روش قبلی گفتیم و با فراخوانی متد Update آن به کار می رود . در این حالت باید مقادیری که می خواهند ویرایش شوند را به وسیله پارامترهایی به کنترل ارسال کنیم . در این بخش به بررسی این روش می پردازیم .

ویرایش اطلاعات با استفاده از کنترل SqlDataSource :

در اینجا روش دوم را شرح خواهیم داد . همانطور که گفتیم ، در این حالت کنترل SqlDataSource را به صورت مستقیم و بدون استفاده از یک کنترل وب کمکی برای ویرایش اطلاعات به کار می بریم . کنترل SqlDataSource برای ویرایش اطلاعات از یک دستور SQL از نوع Update که در خاصیت UpdateCommand آن تعیین می شود ، استفاده می کند . همچنین پارامترهای لازم برای ارسال مقادیر جدید در درون مجموعه < UpdateParameters > آن در داخل تگ کترل تعیین می شوند . سپس با فراخوانی متد ( ) Update کنترل ، عملیات ویرایش داده انجام می شود .
نحوه ویرایش اطلاعات در یک جدول بانک اطلاعاتی با استفاده از کنترل SqlDataSource را در مراحل زیر و با استفاده از یک مثال فرضی درباره جدول Students در پایگاه داده دانشگاه شرح می دهیم :

یک کنترل SqlDataSource را بر روی صفحه اضافه کرده و آن را با تعیین خواص ConnectionString ، ProvideName و SelectCommand که در بخش های قبلی شرح دادیم ، به پایگاه داده مورد نظر خود متصل کنید .
یک دستور SQL از نوع Select را برای تعیین فیلدها و رکوردهایی که در جدول بانک اطلاعاتی باید ویرایش شوند را در خاصیت UpdateCommand کنترل تعیین کنید . برای آشنایی با نحوه نوشتن دستور Update در زبان SQL به بخش آموزش دستور Update در SQL بروید . ساختار این دستور به جدول داده ای مورد استفاده و اینکه چه فیلدها و رکوردهایی را می خواهید ویرایش کنید ، دارد . همچنین باید پارامترهایی که مقادیر جدید برای ویرایش را دریافت کرده و به کنترل ارسال می کنند را در این دستور قرار دهید .
نکته : در هنگام استفاده از پارامترها در دستورات داده ای ، برای تعیین اینکه یک کلمه مفهوم پارامتر را دارد ، باید در ابتدای نام آن یک کاراکتر @ را قرار دهیم . برنامه هر بار که به چنین کلمه ای برخورد کند ، متوجه می شود که یک پارامتر است و مقدار آن باید از منبع داده تعیین شده ، تامین شوبد .
برای نمونه در مثال آموزشی این بخش ، فرض کنید می خواهید در جدول Students پایگاه داده دانشگاه ، نام ( Name ) و نام خواندگی ( Family ) دانشجویی را تغییر دهید ، که شماره ID آن توسط پارامتر Num تعیین می شود . همچنین در این حالت نام و نام خواندگی جدید به ترتیب توسط پارامترهای UName و UFamily به کنترل SqlDataSource ارسای می شوند . شکل دستور Update لازم برای این عمل به صورت زیر خواهد بود :

 UpdateCommand = ” Update Students Set Name = @UName , Family = @UFamily Where ID = @Num “

کد
پارامترهایی را که در دستور UpdateCommand کنترل SqlDataSource استفاده کرده اید را بایستی در مجموعه < UpdateParameters > در درون تگ کنترل ، اضافه کرده و به ازای هر عدد پارامتر استفاده شده یک تگ پارامتر ASP.NET که شامل خصوصیات و اطلاعات لازم درباره آن پارامتر است را قرار دهید . برای دریافت اطلاعات راجع به نحوه تعیین و استفاده و همچنین انواع پارامترهای موجود در برنامه های ASP.NET به بخش استفاده از پارامترهای ۱ , ۲ بروید .
همانطور که متوجه شدید در دستور UpdateCommand مثال فرضی از ۳ پارامتر به تام های Num , UName و UFamily استفاده کرده ایم . این ۳ پارامتر مقادیر خود را از ۳ کنترل TextBox موجود بر روی صفحه دریافت می کنند . نحوه تعریف و استفاده از پارامترها در مجموعه < UpdateParameters > کنترل SqlDataSource به صورت زیر خواهد بود :

 <updateparameters>
< asp:ControlParameter ControlID=”txtName” Name=”UName” PropertyName=”Text” />
< asp:ControlParameter ControlID=”txtFamily” Name=”UFamily” PropertyName=”Text” />
< asp:ControlParameter ControlID=”txtNum” Name=”Num” PropertyName=”Text” />
< /updateparameters >

پس از تعیین پارامترها ، سایر کنترل های دیگر از جمله ۳ کنترل TextBox ی که قرار است مقادیر پارامترها را از کاربر دریافت کرده را به صفحه اضافه کنید .
پس از انجام مراحل فوق باید به یک وسیله متد ( ) Upadte کنترل SqlDataSource را فراخوانی کنیم . برای فراخوانی متد به شکل کلی زیر عمل می کنیم :

    SqlDataSource .Update ( ) ;

مثال :

برای فراخوانی متد ( ) Update کنترل SqlDataSource در مثال فرضی یک دکمه فرمان ( کنترل < asp:Button > ) را به صفحه اضافه کرده و سپس در رویداد کلیک آن فراخوانی متد ( ) Upadate کنترل را قرار می دهیم .
هنگامی که کاربر اطلاعات مورد نظر خود را در کادرهای متن وارد کرده و بر روی دکمه فرمان کلیک می نماید ، کنترل SqlDataSource ابتدا دستور Update موجود در خاصیت UpdateCommand خود را اجرا کرده و مقادیر پارامترهای مورد استفاده در آن را از کنترل های مربوط دریافت می کند . سپس مقادیر پارامترها را در دستور Upadte قرار داده و با اجرای آن ، مقادیر جدید را در جدول اعمال می کند .

مثال : در نهایت باید کد مثال فرضی که در مراحل به آن اشاره کردیم باید به صورت زیر باشد :

< asp:SqlDataSource   runat=”server”   ID=”SqlData1″   ConnectionString=”data source = Developer-PC; initial catalog = UniverCity ; Integrated Security = True ”   ProviderName=”System.Data.SqlClient”    SelectCommand=”Select * From Students “
UpdateCommand=”Update Students Set Name = @ UName , Family = @ UFamily Where ID = @ Num “>
<UpdateParameters>
<asp:ControlParameter   ControlID=”txtName”   Name=”UName” PropertyName=”Text” />
<asp:ControlParameter  ControlID=”txtFamily”   Name=”UFamily” PropertyName=”Text” />
<asp:ControlParameter   ControlID=”txtNum”   Name=”Num” PropertyName=”Text” />
</UpdateParameters>
</asp:SqlDataSource>

<asp:TextBox runat=”server”   ID=”txtName”   Width=”80px” />
<asp:TextBox   ID=”txtFamily”   runat=”server” Width=”80px” />
<asp:TextBox runat=”server”   ID=”txtNum”   Width=”80px” />
<asp:Button runat=”server”   ID=”Btn” Text=”Update !”   OnClick=”Btn_Click” />

نکته مهم : همچنن باید کد فراخوانی متد Update کنترل SqlDataSource که در رویداد کلیک کنترل دکمکه فرمان ( کنترل < asp:button ) قرار دارد را در کد صفحه ASP.NET ( صفحه aspx.CS ) به صورت زیر قرار داد :

 protected void Btn_Click (object source, EventArgs e)
{
SqlData1.Update( ) ;
}