استفاده از پارامترها با کنترل SqlDataSource

دليل استفاده از پارامترها :

همانطور که در بخش قبلی مثالی را ارائه داديم ، در برنامه های واقعی کاربر انتظار دارد تا عمليات های مختلف داده ای از جمله انتخاب ، ويرايش ، صفحه بندی ، فيلترينگ ، مرتب سازی و ... بر حسب مقاديری انجام شوند که در زمان اجرا توسط کاربر تعيين شده و به برنامه ارسال می گردند . استفاده از پارامترها به برنامه انعطاف پذيری و قابليت های زيادی را می بخشد و اين امر باعث می شود تا محتويات و اطلاعات برنامه در هر لحظه بر حسب سليقه و يا نياز کاربر تغيير کند . اگر برنامه قادر به استفاده از پارامترها در زمان اجرا نباشد ، به برنامه ای تبديل می شود که فقط به جزيئات زمان طراحی محدود شده و يک برنامه غير اکتيو خواهد بود . بنابراين بايد امکاناتی را فراهم کرد که بتوان در برناهم های وب از پارامترها و مقادير ارسالی در زمان اجرا استفاده کرد .
کنترل های سرور داده از جمله SqlDataSource به ما امکان می دهند تا در دستورات SQL و يا توابع آماده ( Stored Procedure ) مورد استفاده در آنها از پازامترها استفاده کنيم . مقدار اين پارامترها می تواند از منابع مختلفی همچون کنترل های HTML و يا ASP.NET موجود بر روی صفحه ، کوکی های صفحه ، فرمه های HTML و ... تامين شوند .
از پارامترها می توان برای تعيين اطلاعاتی که لازم است از پايگاه داده استخراج شده و يا اطلاعاتی که می خواهيم آنها را ويرايش کنيم ، استفاده کرد . همچنين پارامترها را برای اعمال ديگر داده ای همچون صفحه بندی ، مرتب سازی ، فيلترينگ داده و ... به کار برد .

استفاده از پارامترها با کنترل SqlDataSource :

کنترل SqlDataSource به ما امکان می دهد تا برای هر عمليات داده ای از پارامترها در دستورات و يا توابع آماده مورد نظر برای آن عمليات ، استفاده کرد . کنترل SqlDataSource برای هر عکمليات داده ای دارای يک مجموعه پارامتر خاص است که در صورتی که بخواهيم از پارامترها در آن عمليات داده ای استفاده کنيم ، بايد مجموعه پارامتر مربوط را در درون تگ کنترل SqlDataSource ايجاد کرده و به ازای هر عدد پارامتر استفاده شده از آن مجموعه ، بايد يک تگ پارامتر مرتبط به آن را که شامل خصوصيات و اطلاعات لازم راجع به پارامتر است را در درون مجموعه تعريف کنيم . تگ معرفی پارامتر شامل اطلاعاتی همچون نام پارامتر ، نوع آن ، محل تامين داده و ... می باشد .
برای مثال کنترل SqlDataSource در عمليات انتخاب داده از مجموعه < SelectParameters > ، در عمليات ويرايش اطلاعات از مجم.عه < UpdateParameters > ، در عمليات فيلترينگ داده از < FilterParameters > و ... استفاده می کند . هنگامی که بخواهيم از پارامترها برای هر يک از عمليات های فوق استفاده کنيم ، بايد تگ مجموعه مورد نظر را در درون تگ کنترل SqlDataSource ايجاد کرده و به ازای هر پارامتر استفاده شده در آن عمليات ، تگ مربوط به آن پارامتر را در درون تگ مجموعه خود تعيين کنيم . برای دريافت اطلاعات درباره نحوه استفاده از پارامترها با کنترل های سرور داده و انواع پارامترهای مورد استفاده در صفحات ASP.NET می توانيد به بخش استفاده از پارامترها همراه با کنترل های داده 1 و 2 برويد .
در مثال های زير از پارامترها در دستوارت انتخاب داده استفاده می کنيم .


استفاده از پارامترها در دستور انتخاب داده < SelectParametres > :

هنگام تعيين دستور انتخاب داده ( SelectCommand ) که در بخش های قبل معرفی کرديم ، در يک کنترل SqlDataSource می توان از پارامترها برای ارسال مقادير جهت تعيين اطلاعات برای انتخاب رکورد ي رکوردهای مورد نظر از جدول داده ای استفاده کرد . در اين حالت پارامترها حاوی مقدار يک يا چند فيلد ( معمولا فيلد رکورد ) داده ای مربوط به يک يا چند رکورد است ، که می خواهيم از جدول داده انتخاب و نمايش دهيم .
برای استفاده از پارامترها در دستور انتخاب داده بايد مراحل زير را انجام دهيم :

  1. تگ مجموعه پارامترهای دستور انتخاب داده یعنی < SelectParameters > را به درون تگ کنترل SqlDataSource اضافه کنيم .
  2. به ازای هر عدد پارامتری که می خواهيم در دستور SelectCommand برای انتخاب داده استفاده کنيم ، يک تگ پارامتر ASP.NET شامل مشخصات و اطلاعات لازم برای آن پارامتر را ، در درون تگ < SelectParameters > ايجاد کنيم .
  3. پارامترهای مورد استفاده را در درون دستور انتخاب داده SelectCommand نام گذاری کرده و آن ها را به منبع تامين داده متصل کنيم .
    نکته : در هنگام استفاده از پارامترها در دستورات داده ای ، برای تعيين اينکه يک کلمه مفهوم پارامتر را دارد ، بايد در ابتدای نام آن يک کاراکتر @ را قرار دهيم . برنامه هر بار که به چنين کلمه ای برخورد کند ، متوجه می شود که يک پارامتر است و مقدار آن بايد از منبع داده تعیين شده ، تامین شود .

برای نشان دادن و تفهيم بهتر مطالب به يک مثال اشاره می کنيم . فرض کنيم که می خواهيم در جدول Students پايگاه داده دانشگاه که آنرا در مثال های قبل نيز به کار برده ايم ، اطلاعات دانشجویان را در 2 حالت متفاوت نمايش دهيم . در حالت اول اطلاعات دانشجویانی را نمايش دهيم که رشته تحصيلی ( Major ) آنها سخت افزار ( HardWare ) بوده و در حالت دوم نيز اطلاعات دانشجویانی را نمايش دهيم که رشته تحصيلی آنها نرم افزار ( SoftWare ) است . در اين حالت بايد مقدار فيلد رشته تحصيلی ( Major ) در جدول Students یعنی SoftWare يا HardWare را در هر حالت به وسيله يک پارامتر به دستور انتخاب داده ارسال کنيم ، تا کنترل فقط اطلاعات دانشجويان مورد نظر را از جدول داده دريافت کرده و ارسال کند . پس از تعيين پارامتر مورد نظر و تنظيم نحوه مقدار دهی آن در هنگام اجرا ، برنامه به صورت اتوماتيک مقدار تعيين شده برای پارامتر را دريافت کرده و به کنترل ارسال می کند . سپس مقدار ارسال شده در دستور انتخاب داده به جای پارامتر تعيین شده برای آن نشسته و دستور انتخاب داده اجرا می شود .

مثال : مثال بالا را در عمل نشان می دهيم . در اين مثال يک کنترل SqlDataSource را به پايگاه داده UniverCity و جدول Students متصل کرده و اطلاعات دريافتی را به وسيله يک کنترل GridView نمايش می دهيم . يک پارامتر به نام Major را در دستور SelectCommand کنترل SqlDataSource برای دريافت مقدار رشته تحصيلی دانشجویان ايجاد کرده ايم . اين پارامتر مقدار خود را از يک کنترل < asp:RadioButtonlist > که دارای دو مقدار SoftWare , HardWare است دريافت می کند . هر بار که مقدار يکی از گزينه های کنترل انتخاب شود ، مقدار رشته تحصيلی انتخاب شده به پارامتر Major@ ارسال شده و دستور انتخاب داده کنترل SqlDataSource با مقدار آن اجرا می شود :

Example
< asp:SqlDataSource   runat="server"   ID="SqlData1"   ConnectionString="data source = Developer-PC; initial catalog = UniverCity ; Integrated Security = SSPI "   ProviderName="System.Data.SqlClient"   SelectCommand="Select * From Students Where Major = @Major" >
  < SelectParameters >
     < asp:ControlParameter   ControlID="RBL1"   Name="Major" / >
  < /SelectParameters >

< /asp:SqlDataSource >

< asp:GridView   runat="server"   ID="G1"   DataSourceID="SqlData1" >
< /asp:GridView >


< asp:RadioButtonList runat="server"   ID="RBL1"   AutoPostBack="true" >
   < asp:ListItem > SoftWare < /asp:ListItem >
   < asp:ListItem > HardWare < /asp:ListItem >
< /asp:RadioButtonList >
کد