استفاده از پارامترها با کنترل 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 می توان از پارامترها برای
ارسال مقادير جهت تعيين اطلاعات برای انتخاب رکورد ي رکوردهای مورد نظر از جدول داده
ای استفاده کرد . در اين حالت پارامترها حاوی مقدار يک يا چند فيلد ( معمولا فيلد رکورد
) داده ای مربوط به يک يا چند رکورد است ، که می خواهيم از جدول داده انتخاب و نمايش
دهيم .
برای استفاده از پارامترها در دستور انتخاب داده بايد مراحل زير را انجام دهيم :
- تگ مجموعه پارامترهای دستور انتخاب داده یعنی < SelectParameters > را به درون
تگ کنترل SqlDataSource اضافه کنيم .
- به ازای هر عدد پارامتری که می خواهيم در دستور SelectCommand برای انتخاب داده استفاده
کنيم ، يک تگ پارامتر ASP.NET شامل مشخصات و اطلاعات لازم برای آن پارامتر را ، در
درون تگ < SelectParameters > ايجاد کنيم .
- پارامترهای مورد استفاده را در درون دستور انتخاب داده SelectCommand نام گذاری کرده
و آن ها را به منبع تامين داده متصل کنيم .
نکته : در هنگام استفاده از پارامترها در دستورات داده ای ، برای
تعيين اينکه يک کلمه مفهوم پارامتر را دارد ، بايد در ابتدای نام آن يک کاراکتر @ را
قرار دهيم . برنامه هر بار که به چنين کلمه ای برخورد کند ، متوجه می شود که يک پارامتر
است و مقدار آن بايد از منبع داده تعیين شده ، تامین شود .
برای نشان دادن و تفهيم بهتر مطالب به يک مثال اشاره می کنيم . فرض کنيم که می خواهيم
در جدول Students پايگاه داده دانشگاه که آنرا در مثال های قبل نيز به کار برده ايم
، اطلاعات دانشجویان را در 2 حالت متفاوت نمايش دهيم . در حالت اول اطلاعات دانشجویانی
را نمايش دهيم که رشته تحصيلی ( Major ) آنها سخت افزار ( HardWare ) بوده و در حالت
دوم نيز اطلاعات دانشجویانی را نمايش دهيم که رشته تحصيلی آنها نرم افزار ( SoftWare
) است . در اين حالت بايد مقدار فيلد رشته تحصيلی ( Major ) در جدول Students یعنی
SoftWare يا HardWare را در هر حالت به وسيله يک پارامتر به دستور انتخاب داده ارسال
کنيم ، تا کنترل فقط اطلاعات دانشجويان مورد نظر را از جدول داده دريافت کرده و ارسال
کند . پس از تعيين پارامتر مورد نظر و تنظيم نحوه مقدار دهی آن در هنگام اجرا ، برنامه
به صورت اتوماتيک مقدار تعيين شده برای پارامتر را دريافت کرده و به کنترل ارسال می
کند . سپس مقدار ارسال شده در دستور انتخاب داده به جای پارامتر تعيین شده برای آن
نشسته و دستور انتخاب داده اجرا می شود .
مثال : مثال بالا را در عمل نشان می دهيم . در اين مثال يک کنترل
SqlDataSource را به پايگاه داده UniverCity و جدول Students متصل کرده و اطلاعات دريافتی
را به وسيله يک کنترل GridView نمايش می دهيم . يک پارامتر به نام Major
را در دستور SelectCommand کنترل SqlDataSource برای دريافت مقدار رشته تحصيلی
دانشجویان ايجاد کرده ايم . اين پارامتر مقدار خود را از يک کنترل <
asp:RadioButtonlist > که دارای دو مقدار SoftWare , HardWare است دريافت
می کند . هر بار که مقدار يکی از گزينه های کنترل انتخاب شود ، مقدار رشته تحصيلی انتخاب
شده به پارامتر Major@ ارسال شده و دستور انتخاب داده کنترل SqlDataSource با مقدار
آن اجرا می شود :
< 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 >
|