حذف اطلاعات مورد نظر با استفاده از کنترل SqlDataSource

حذف اطلاعات :

همانطور که در مقدمه اشاره کرديم ، معمولا برخی از اطلاعات بانک های اطلاعاتی با گذشت زمان بی اعتبار شده و ديگر نيازی به آنها نيست و بايد به طريقی از جداول اطلاعاتی حذف شوند . بنابراين در هنگام کار با يک کنترل داده SqlDataSource ، بايد اين امکان وجود داشته باشد که بتوانيم اطلاعات مورد نظر خود را از پايگاه داده حذف کنيم .
کنترل SqlDataSource برای حذف اطلاعات از يک جدول بانک اطلاعاتی متصل به آن ، از يک دستور Delete به زبان SQL که در خاصيت DeleteCommand آن تعيين می شود ، استفاده می کند . شما بايستی با توجه به ساختار بانک اطلاعاتی خود و اينکه چه فيلد يا رکوردهایی را در آن می خواهيد حذف کنيد ، يک دستور Delete به زبان SQL را در خاصيت DeleteCommand کنترل قرار دهيد . برای آشنايي با ساختار دستور Delete در زبان SQL می توانيد به بخش آموزش دستور Delete در زبان SQL برويد .

اين دستور هر بار که کنترل بخواهد از جدول بانک اطلاعاتی داده هایی را حذف کند و یا متد ( ) Delete آن به طريقی فراخوانی شود ، خواند شده و اجرا می گردد .
نکته : همچنين می توان از توابع آماده ( Stored Procedure ) در دستور Delete کنترل استفاده کرد . در اين حالت ابتدا بايد تابع را طراحی کرده و آن را نام گذاری کنيد . سپس مقدار خاصيت DeleteCommand کننرل را با نام تابع آماده طراحی شده مورد نظر مقدار دهی کرد و همچنين مقدار خاصيت DeleteCommandType کنترل را بر روی Stored Procedure تنظيم کنيد . استفاده از اين روش را در مثال شماره 2 اين بخش نشان خواهم داد .


استفاده از پارامترها در دستور Delete خاصيت DeleteCommand :

معمولا هنگامی که می خواهيم اطلاعاتی را از يک جدول بانک اطلاعاتی حذف کنيم ، بايد مقدار يک يا چند فيلد رکورد يا رکوردهای مورد نظر را به عنوان نشانه و آدرس ، برای یافتن رکوردهای مورد نظر به دستور Delete خاصيت DeleteCommand کنترل SqlDataSource ارسال کنيم . مثلا فرض کنيد که در جدول Students پايگاه داده دانشگاه ، می خواهيم اطلاعات دانشجویانی را حذف کنيم که رشته تحصيلی آنها سخت افزار ( HardWare ) است . بنابراين بايد به روشی مقدار فيلد رشته تحصيلی ( فيلد Major ) را که برابر با مقدار ( HardWare ) است را از طريق يک پارامتر به دستور Delete کنترل ارسال کنيم . در اين جاست که بايد از پارامترها استفاده کرد . معمولا برای دريافت مقادير فيلدها از کنترل هایی مثل کنترل های کادر متن ( < asp:TextBox > ) در صفحات ASP.NET استفاده می شود . کاربر بايد مقادير لازم برای فيلدها جهت يافتن رکوردهای مورد نظر ، را در کنترل های مربوط وارد کرده و سپس عمليات حذف را با فراخوانی متد ( ) Delete کنترل SqlDataSource انجام دهد .
چنانچه از پارامترهایی در دستور Delete خاصيت DeleteCommand کنترل استفاده کنيم ، بايد آنها را در مجموعه پارامترهای عمليات حذف داده کنترل که با تگ < DeleteParameters > در درون تگ کنترل مشخص می شوند ، تعيين کرد . در اين مجموعه به ازای هر عدد پارامتر استفاده شده ، يک تگ پارامتر تعيين کرده و مشخصات لازم برای آن را از جمله محل تامين داده ، نوع و ... را مشخص سازيم . برای دريافت اطلاعات راجع به نحوه تعيين و استفاده و همچنين انواع پارامترهای موجود در برنامه های ASP.NET به بخش استفاده از پارامترهای 1 , 2 برويد .
پس از اينکه پارامترهایی که می خواهيم در دستور DeleteCommand استفاده کنيم را تعيين کرديم ، بايد کنترل های لازم را برای دريافت مقادير پارامترها را بر روی صفحه قرار دهيم . سپس بايستی به يک روش ، متد ( ) Delete کنترل را فراخوانی کنيم . برای اين منظور می توان به روش های مختلفی عمل کرد که در اينجا يک نمونه را مثال می زنيم . می توان کد فراخوانی متد ( ) Delete را در رويداد کليک يک دکمه فرمان ( کنترل < asp:Button > ) قرار دهيم ، که با هر بار کليک کاربر بر روی آن ، آن رويداد اجرا شده و متد ( ) Delete فراخوانی می شود .
شکل کلی فراخوانی متد ( ) Delete يک کنترل SqlDataSource به صورت زير است :

Syntax SqlDataSourceنام کنترل .Delete ( ) ;
مثال :   SqlControl1.Delete ( ) ;

برای درک بهتر مطالب ذکر شده به يک مثال اشاره می کنيم .
مثال : در مثال زير يک کنترل SqlDataSource را به پايگاه داده دانشگاه ( UniverCity ) متصل کرده ايم . اين کنترل دارای يک دستور Delete است که آن را در خاصيت DeleteCommand آن تعيين کرده ايم . اين دستور برای حذف اطلاعات رکورد مربوط به يک دانشجوی مورد نظر در هر لحظه استفاده می شود . برای اينکه تعيين کنيم که از جدول بانک اطلاعاتی Students در پايگاه داده دانشگاه در هر لحظه مشخصات چه دانشجویی حذف شود ، مقدار نام و نام خواندگی آن دانشجو را به وسيله دو پارامتر D_Name و D_Family که به ترتيب مقادير خود را از دو کنترل کادر متن Name و Family دريافت می کنند ، به دستور Delete کنترل ارسال می کنيم . سپس به وسيله رويداد کليک دکمه فرمان Delete Data متد ( ) Delete کنترل اجرا شده و رکورد دانشجویی تعيين شده حذف خواهد شد .
برای کارایی اين مثال بايد ابتدا اطلاعات نام و نام خواندگی دانشجویی که می خواهيد رکورد آن را حذف کنيد را در کنترل های کادر متن وارد کرده و سپس بر روی دکمه فرمان Delete Data کليک کنيد :

< 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 "
DeleteCommand = " Delete From Students Where Name = @D_Name   AND   Family = @D_Family " >

   <DeleteParameters>
     <asp:ControlParameter   ControlID="txtName"   Name="D_Name" PropertyName="Text" />
     <asp:ControlParameter   ControlID="txtFamily"   Name="D_Family" PropertyName="Text" />
   </DeleteParameters>

</asp:SqlDataSource>

<asp:TextBox   runat="server"   ID="txtName"   Width="80px" />
<asp:TextBox   runat="server"   ID="txtFamily"   Width="80px" />
<asp:Button runat="server"   ID="Btn" Text="Delete Data"   OnClick="Btn_Click" />
کد

نکته : همچنين بايد کد فراخوانی متد ( ) Delete کنترل SqlDataSource را در رويداد کليک دکمه فرمان Btn در فايل کد صفحه ASP.NET خود قرار دهيد :

protected void Btn_Click (object source, EventArgs e)
  {
    SqlData1.Delete( ) ;
  }
کد