انتخاب اطلاعات توسط کنترل 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 دريافت کند :
< 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 بايد مراحل زير را انجام دهيد :
- تابع آماده مورد نظر را در پايگاه داده متصل به کنترل ايجاد و نام گذاری کنيد و دستور
SQL مورد نظر خود را برای Select داده در آن تعيين کنيد .
- مقدار خاصيت SelectCommand را با نام تابع آماده مورد نظر مقدار دهی کنيد .
- مقدار خاصيت 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 تنظيم می کنيم :
< 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 تنظيم شده است :
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 >
|