انتخاب اطلاعات توسط کنترل SqlDataSource

انتخاب اطلاعات توسط کنترل SqlDataSource :

پس از اينکه 2 رکن اصلی برای اتصال کنترل SqlDataSource به يک پايگاه داده یعنی ConnectionString و ProvideNmae را تنظيم کرديد ، شما بايستی اطلاعاتی را که می خواهيد کنترل SqlDataSource از بانک اطلاعاتی برای شما فراخوانی و دريافت کرده را تعيين کنيد .
برای مثال فرض کنيد در پايگاه داده دانشگاه ، يک جدول به نام students داريد و می خواهيد در يک جدول بر روی صفحه ASP.NET خود ، نام و نام خواندگی دانشجويان را نمايش دهید . برای اين منظور بايستی به طريقی اطلاعات درخواستی خود را تعيين کنيد . یعنی به کنترل بگوييد که کدام فيلدها را از کدام جدول بانک اطلاعاتی دريافت کند . جهت تعيين اطلاعات درخواستی توسط کنترل SqlDataSource ، از يک دستور به زبان SQL که از نوع Select می باشد ، استفاده می کنيم . برای اين منظور بايد مقدار خاصيت SelectCommand کنترل را برابر با دستور SQL مورد نظر قرار دهيم .

راهنمایی : البته قبل از مطالعه اين بخش ، شما بايستی با نحوه نوشتن دستور Select در زبان SQL و مقدمات بانک اطلاعاتی SQL Server آشنا باشید . برای اين منظور می توانید به بخش آموزش دستور Select در زبان SQL در سايت من برويد .

مثال : در مثال زير يک کنترل SqlDataSource را بر روی صفحه قرار داده ايم و آن را با استفاده از ConnectionString به پايگاه داده UniverCity متصل کرده ايم . همچنين توسط دستور Select تعيين شده در خاصيت SelectCommand از کنترل خواسته ايم که مقدار فيلدهای Name و Family را از جدول Students دريافت کند :

Example
< asp:SqlDataSource   runat="server"   ID="SqlControl1"  ConnectionString = " < %$ ConnectionStrings:SampleConnection % > "   SelectCommand="Select Name , Family from Students " >
< /asp:SqlDataSource >
کد

نکته مهم : همانطور که قبلا در بخش مقدمه کنترل های سرور داده اشاره کرديم ، اين کنترل ها فقط برای دريافت و ارسال اطلاعات به منابع داده ای استفاده می شوند و خود قادر به نمايش و يا ويرايش اطلاعات نيستند . در مثال فوق نيز کنترل SqlDataSource فقط اطلاعات درخواستی را از پايگاه داده دريافت کرده و خود قادر به نمايش آنها نيست. برای نمايش اطلاعات دريافتی بايد يک کنترل وب مثل FormView و يا DetaisView را به اين کنترل متصل کرده و اطلاعات را با آن کنترل نمايش داد . نحوه اتصال يک کنترل وب به کنترل های سرور داده را در بخش های بعدی شرح خواهيم داد .


استفاده از توابع آماده برای فراخوانی داده :

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

  1. تابع آماده مورد نظر را در پايگاه داده متصل به کنترل ايجاد و نام گذاری کنيد و دستور SQL مورد نظر خود را برای Select داده در آن تعيين کنيد .
  2. مقدار خاصيت SelectCommand را با نام تابع آماده مورد نظر مقدار دهی کنيد .
  3. مقدار خاصيت SelectCommandType کنترل SqlDataSource را به مقدار Stored Procedure تنظيم کنيد .

نکته : مفدار خاصيت SelectCommandType کنترل های SqlDataSoure به طور پيش فرض بر روی مقدار Text تنظيم شده است ، که مفهوم آن اينست که مقدار خاصيت SelectCommand بايد از نوع دستور Select به زبان SQL باشد و نيازی به تعيين آن در هنگام استفاده مستقيم از دستور Select نيست . اما در صورت استفاده از توابع آماده بايد مقدار آن را روی Stored Procedure تنظيم کرد تا کنترل بداند که برای دريافت اطلاعات بايد از يک تابع آماده استقاده کند و نه يک دستور متنی Select .

در زمان اجرا ، کنترل SqlDataSource به Stored Procedure تعيين شده مراجعه کرده ، دستورات آن را فراخوانی و اجرا می کند . استفاده از Stored Procedure به انعطاف و امنيت برنامه های تحت وب کمک می کند . زيرا توابع آماده به صورت غير مستقيم در برنامه استفاده شده ، حال آنکه دستور Select به صراحت در کد برنامه تعيين می شوند . در مثال زير نحوه تعيين و استفاده از يک Stored Procedure را به همراه کنترل SqlDataSource را نشان داده ايم :

مثال : در مثال زير يک تابع آماده به نام MySP را با محتويات زير که يک دستور Select است ، ايجاد کرده ايم .

Create   Procedure   MySP     As
    Select   Name   ,   Family   From   Students
GO
کد

سپس برای استفاده کنترل از تابع تعيين شده ، مقدار خاصيت SelectCommand کنترل را برابر با نام تابع مورد نظر یعنی MySP قرار داده و مقدار خاصيت SelectCommandType کنترل را روی مقدار Stored Procedure تنظيم می کنيم :

Example
< asp:SqlDataSource   runat="server"   ID="SqlControl1"  ConnectionString = " < %$ ConnectionStrings:SampleConnection % > "   SelectCommand= " MySP "   SelectCommandType = " Stored Procedure " >
< /asp:SqlDataSource >
کد


تعيين اينکه اطلاعات دريافتی چگونه نگهداری شوند :

پس از اينکه کنترل SqlDataSource ، اطلاعات مورد نظر شما را از منبع داده ای دريافت کرد ، می توانيد تعيين کنيد که آيا اين کنترل اطلاعات دريافتی را در حافظه سرور نگهداری کند يا خير . نگهداری اطلاعات دريافتی در حافظه باعث می شود تا کنترل های سرور داده به کنترل های وب متصل به آنها قابليت ها و ويژگی های زيادی را بدهند . چنانچه اطلاعات دريافتی در حافظه سرور نگهداری شوند ، کنترل های وب متصل به آنها می توانند اعمال مختلفی از قبيل مرتب سازی ، صفحه بندی ، فيلترينگ داده و ... را بر روی اطلاعات انجام دهند . اما در صورتی که اين اطلاعات در حافظه نگهداری نشوند ، انجام این اعمال غير ممکن است .
تعيين وضعيت نگهداری اطلاعات در حافظه ، توسط خاصيت DataSourceMode کنترل سرور داده انجام می شود . اين خاصيت می تواند 2 مقدار DataSet و DataReader را داشته باشد . چنانچه مقدار آن بر روی DataSet تنظيم شود کنترل اطلاعات را در حافظه نگهداری می کند و در صورتی که مقدار آن با DataReader ست شود ، اطلاعات در حافظه نگهداری نمی شوند .

نکته : مقدار خاصيت DataSourceMode کنترل های سرور داده به طور پيش فرض بر روی DataSet تنظيم شده است ، اما در برنامه هایی که به دلايل خاص نيازی به نگهداری اطلاعات دريافتی در حافظه نداريم ، بايد مقدار آن را بر روی DataReader تنظيم کنيم .

مثال : در مثال زير 2 کنترل SqlDataSource را نشان داده ايم که در کنترل اول مقدار خاصيت DataSourceMode آن بر روی DataSet و در کنترل دوم مقدارش بر روی DataReader تنظيم شده است :

Example
1 :
< asp:SqlDataSource   runat="server"   ID="SqlControl1"  ConnectionString = " < %$ ConnectionStrings:SampleConnection % > "   SelectCommand= " MySP "   SelectCommandType = " Stored Procedure "   DataSourceMode = " DataSet " >
< /asp:SqlDataSource >


2 :
< asp:SqlDataSource   runat="server"   ID="SqlControl2"  ConnectionString = " < %$ ConnectionStrings:SampleConnection % > "   SelectCommand= " MySP "   SelectCommandType = " Stored Procedure "   DataSourceMode = " DataReader " >
< /asp:SqlDataSource >
کد