تعریف و توضیح Sql DataSource
برای نمایش دادن اطلاعات به کاربر از طریق طراحی سایت و اتصال ان به دیتابیس و نمایش اطلاعات به یوزر به شکل زیر میباشد .
Sql DataSource
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ...></asp:SqlDataSource>
و فضاھای نام زير را پوشش می دھد:
• System.Data.SqlClient • System.Data.OracleClient • System.Data.OleDb • System.Data.Odbc
اين ھا ھمان Provider ھای پايگاه داده ھستند.و به صورت زير به تعريف SqlDataSource اضافه می شوند در زير ما فضای نام مربوط به پايگاه داه ی Sql را به آن نسبت داديم:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ProviderName="System.Data.SqlClient" ></asp:SqlDataSource>
نکته : ارتباط بین DataSource و سئو سایت تنها مواقعی مهم میشود که اطلاعات در دیتابیسی ذخیره شده باشد که دامنه شما در ان جاست و محتوای سایت از دیتا بیسی دیگر خوانده نمیشود.
مھم تر از ھر چيز رشته ی اتصال است.شما اگر ارز قبل تگ ConnectionStrings را در فايل Web.Config پر کرده باشيد با استفاده از تگ <..$%> می توانيد به آن دسترسی داشته باشيد:
"asp:SqlDataSource ID="SqlDataSource1" runat="server> "<%$ProviderName="System.Data.SqlClient" ConnectionString <ConnectionStrings:aaa %>" ></asp:SqlDataSource
در مرحله ی بعدی برای اینکه در طراحی وبسایت ايجاد يک Query برای اين کنترل است.اگر ھدف شما Select کردن تعدادی سطر باشد از گزينه ی SelectCommand استفاده کنيد:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:aaa %>" SelectCommand="SELECT * FROM depositor"> </asp:SqlDataSource>
اين متدھا در قسمت Properties از Visual Studio نيز قابل دسترسی ھستند.ولی ما به صورت کد ينگ ھمه ی آنھا را بيان می کنيم تا با صفحه ی Aspx نيز آشنا شويد. سپس می توانيد خروجی اين کنترل را در يک جا نمايش دھيد جدول ما 2 ستون دارد 1- نام 2- شماره حساب می خواھيم نام ھا را در يک کنترل ListBox قرار داده و سپس کل داده ھا را در يک GridView نشان دھيم.
برای نمايش نام ھا در کنترل ListBox در رويداد Page_Load به صورت زير عمل میکنيم:
ListBox1.DataSource = SqlDataSource1 ListBox1.DataTextField = "customer_name" Me.DataBind()
البته روش ھای مختلفی برای اين کار وجود دارد مثلا در تگ DataSourceID از کنترل ListBox می توانيد نام SqlDataSource مربوطه را ذکر کنيد:
<asp:ListBox ID="ListBox1" runat="server" DataSourceID="SqlDataSource1" DataTextField="customer_name"></asp:ListBox>
اگر اين کار را کنيد نياز به Bind کردن صفحه نداريد چون اين کار خودکار انجام می شود.اين کار را برای کنترل GridView ھم می توانيد انجام دھيد.صفت DataSourceID شناسه ی کنترل منبع داده که ما در بالا نام ان را (SqlDataSource) گذاشتيم.حال نوبت GridView است:
GridView1.DataSource = SqlDataSource1 Me.DataBind()
در کنترل SqlDataSource يک خاصيت وجود دارد به نام DataSource خوب شايد تعجب کنيد ولی اين خاصيت دو مقدار بيشتر ندارد 1-DataSet 2- DataReader که مقدار پيش فرض ھم ھست.شما ھم با شی DataSet و ھم با شی DataReader آشناييد و می دانيد که ھر دو می توانند جداول پايگاه داده را درخود ذخيره کنند.با آشنايی که از DataSet داريم می دانيم که به مراتب بھتر از DataReader است.زيرا پشتيبانی آن از Sorting-filtering … باعث اين امر است علاوه بر اين ھا در حجم ھای انبوه سطر در يک جدول اگر از DataReader استفاده کنيد حجم حافظه ای بسيار زيادی را اشغال میکند.
حال می خواھيم يک مثال با دستورات Sql حاوی پارامتر را با ھم ببينيم.در اين مثال يک کنترل DropDownList داريم که حاوی نام يک سرس شھر است و می خواھيم با انتخاب ھر شھر دران اسمی مشتريانی که در آن ھر حساب دارند در يک GridView نمايش داده شود.پس ابتدا کنترل منبع داده ای برای اسامی شھر ھا در نظر می گيريم:
<asp:SqlDataSource ID="sqldatasource1" runat="server" ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:aaa %>" SelectCommand="SELECT DISTINCT customer_city FROM customer"> </asp:SqlDataSource>
دقت کنيد چون اسامی شھر ھا در پايگاه داده بسيار زياد و تکراری بودند ما از عبارت DISTINCT جلوی Select استفاده کرديم تا تکراری ھا از بين رفته و از ھر شھر فقط يک نام به ما بدھد.سپس اين منبع داده ای را به کنترل DropDownList نسبت می دھيم و از آنجايی که ھيچ دکمه ای در ميان نيست يعنی پس از انتخاب آيتم از DropDownList می خواھيم به صفحه ی مربوطه برويم ميبايست خاصيت AutoPostBack آن را true قرار دھيم اين کار علاوه بر اين باعث بھبود کارايی وبسايت می شود و با ھر بار PostBack شدن صفحه باعث می شود ھر بار کنترل DropDownList از پايگاه داده خود را به روز نکند:
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceId="sqldatasource1" DataTextField="customer_city" AutoPostBack="true"></asp:DropDownList>
حال نوبت به منبع داده ی دوم می رسد:
<asp:SqlDataSource ID="sqldatasource2" runat="server" ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:aaa %>" SelectCommand="SELECT customer_name,customer_street FROM customer WHERE customer_city=@city"> </asp:SqlDataSource>
ھمه چيز مثل قبلی است به غير از Query که کاملا واضح است.حالا نوبت به ايجاد پارامتر می رسد.ما در اينجا يک پارامتر داريم و آن ھم city@ است.برای ايجاد پارامتر بايد از تگ مخصوصی در آن استفاده کنيم .ليست تگ ھای مورد نياز ما ومربوط به پارامتر ھای SqlDataSource به شرح زير است: در پست بعدی به تشریح SqlDataSource پارامتر ھای میپردازم.
دیدگاهتان را بنویسید