پس از اینکه ۲ رکن اصلی برای اتصال کنترل 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
|
سپس برای استفاده کنترل از تابع تعیین شده ، مقدار خاصیت SelectCommand کنترل را برابر با نام تابع مورد نظر یعنی MySP قرار داده و مقدار خاصیت SelectCommandType کنترل را روی مقدار Stored Procedure تنظیم می کنیم
:
< asp:SqlDataSource runat=”server” ID=”SqlControl1″ ConnectionString = ” < %$ ConnectionStrings:SampleConnection % > ” SelectCommand= ” MySP ” SelectCommandType = ” Stored Procedure ” > < /asp:SqlDataSource >
|
تعیین اینکه اطلاعات دریافتی چگونه نگهداری شوند :
پس از اینکه کنترل SqlDataSource ، اطلاعات مورد نظر شما را از منبع داده ای دریافت کرد ، می توانید تعیین کنید که آیا این کنترل اطلاعات دریافتی را در حافظه سرور نگهداری کند یا خیر . نگهداری اطلاعات دریافتی در حافظه باعث می شود تا کنترل های سرور داده به کنترل های وب متصل به آنها قابلیت ها و ویژگی های زیادی را بدهند . چنانچه اطلاعات دریافتی در حافظه سرور نگهداری شوند ، کنترل های وب متصل به آنها می توانند اعمال مختلفی از قبیل مرتب سازی ، صفحه بندی ، فیلترینگ داده و … را بر روی اطلاعات انجام دهند . اما در صورتی که این اطلاعات در حافظه نگهداری نشوند ، انجام این اعمال غیر ممکن است .
تعیین وضعیت نگهداری اطلاعات در حافظه ، توسط خاصیت DataSourceMode کنترل سرور داده انجام می شود . این خاصیت می تواند ۲ مقدار DataSet و DataReader را داشته باشد . چنانچه مقدار آن بر روی DataSet تنظیم شود کنترل اطلاعات را در حافظه نگهداری می کند و در صورتی که مقدار آن با DataReader ست شود ، اطلاعات در حافظه نگهداری نمی شوند .
نکته : مقدار خاصیت DataSourceMode کنترل های سرور داده به طور پیش فرض بر روی DataSet تنظیم شده است ، اما در برنامه هایی که به دلایل خاص نیازی به نگهداری اطلاعات دریافتی در حافظه نداریم ، باید مقدار آن را بر روی DataReader تنظیم کنیم .
مثال : در مثال زیر ۲ کنترل SqlDataSource را نشان داده ایم که در کنترل اول مقدار خاصیت DataSourceMode آن بر روی DataSet و در کنترل دوم مقدارش بر روی DataReader تنظیم شده است :
۱ : < 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 > |