ويرايش اطلاعات با کنترل SqlDataSource

مقدمه :

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

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

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

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

  1. يک کنترل SqlDataSource را بر روی صفحه اضافه کرده و آن را با تعيين خواص ConnectionString ، ProvideName و SelectCommand که در بخش های قبلی شرح داديم ، به پايگاه داده مورد نظر خود متصل کنيد .
  2. يک دستور 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 " کد
  3. پارامترهايي را که در دستور UpdateCommand کنترل SqlDataSource استفاده کرده ايد را بايستی در مجموعه < UpdateParameters > در درون تگ کنترل ، اضافه کرده و به ازای هر عدد پارامتر استفاده شده يک تگ پارامتر ASP.NET که شامل خصوصيات و اطلاعات لازم درباره آن پارامتر است را قرار دهيد . برای دريافت اطلاعات راجع به نحوه تعيين و استفاده و همچنين انواع پارامترهای موجود در برنامه های ASP.NET به بخش استفاده از پارامترهای 1 , 2 برويد .
    همانطور که متوجه شديد در دستور UpdateCommand مثال فرضی از 3 پارامتر به تام های Num , UName و UFamily استفاده کرده ايم . اين 3 پارامتر مقادير خود را از 3 کنترل 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 >
    کد
  4. پس از تعيين پارامترها ، ساير کنترل های ديگر از جمله 3 کنترل TextBox ی که قرار است مقادير پارامترها را از کاربر دريافت کرده را به صفحه اضافه کنيد .
  5. پس از انجام مراحل فوق بايد به يک وسيله متد ( ) Upadte کنترل SqlDataSource را فراخوانی کنيم . برای فراخوانی متد به شکل کلی زير عمل می کنيم :

    Syntax SqlDataSourceنام کنترل .Update ( ) ;
    مثال :   SqlControl1.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( ) ;
  }
کد