ادامه Sql DataSource
ادامه مبحث Sql DataSource در پست قبلی
SqlDataSourceبه شرح زير است:
SelectParameter: که پارامتر ھای مخصوص Query ھای Select را در برميگيرد.
UpdateParameter:که پارامتر ھای مخصوص Query ھای Update را در را درمیگیرد.
DeleteParameter: که پارامتر ھای مخصوص Query ھای Delete را در برمیگیرد.
در اينجا چون Query ما از نوع Select است از تگ SelectParameter استفاده می کنيم:
<asp:SqlDataSource ID="sqldatasource1" runat="server" ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:aaa %>" SelectCommand="SELECT DISTINCT customer_city FROM customer"></asp:SqlDataSource> <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"> <SelectParameters> </SelectParameters> <asp:SqlDataSource/>
حالا درداخل اين تگ چه بنويسيم؟.ليست عناصری که ميتوان از آن ھا به عنوان پارامتر در استفاده کرد در زيرآمده است:
ControlParameter: مشخص می کند معماری طراحی وب سایت از مقدار Value پارامتر ما از يک کنترل تامين شود.مثلا يک TextBox که در سایت داريم که خاصيت Text آن را به عنوان Value پارامتر خود در نظر می گيريم.
QueryString Value:مشخص می کند که Value پارامتر ما از يک QueryString که از صفحه ی قبل به صفحه ی جاری سایت فرستاده شده تامين شود.
SessionState Value:مشخص می کند که Value پارامتر ما از يک شی Session بدست آيد که قبلا آن را مقدار دھی کرده بوديم.
آن را مقدار دھی کرده بوديم.
Parameter: که مشخص کننده ی حضور يک پارمتر در Query ماست.و در کنترل ھايی مثل GridView که مثلا قصد ويرايش و يا حذف را دارد می باشد.
Cookie Value: مشخص می کند که Value پارامتر ما مقدار يک Qookie باشد.
Profile Value: مشخص می کند که Value پارامتر ما از يک Profile تامين شود که در فصول مربوط به Security به آن می پردازيم.
مقدار پارمتر دهی در معماری وبسایت باید به گونه ای سازمان دهی شود که به بهینه سازی سرعت سایت کمک شود تا تعداد درخواست ریکوست به سرور کمتر شود این مورد به سئو وبسایت کمک شایانی میکند
در اينجا پارامتر ما از خصوصيت SelectedValue کنترل DropDownList تامين ميشود.شايد از خود بپرسيد ما که DataValueField را در دیتا بیس سایت مقداردھی نکرديم و DataTextField را مقداردھی کرديم پس چرا خصوصيت SelectedValue کنترل DropDownList انتخاب می شود؟در پاسخ بگويم اگر شما در ھر کنترل ليستی Textرا تعيين کنيد ولی Value راتعيين نکنيد مقدار Text خود به خود به Value ھم منتقل میشود. از آنجاييکه DropDownList کنترل است پس بايد پارامتر از نوع ControlParameter باشد:
<SelectParameters> <asp:ControlParameter /> </SelectParameters>
اين تگ بايد حداقل حاوی ٣ مقدار مھم باشد:
ControlID که Id کنترلی که پارامتر از آن تامين ميشود است که در اينجا DropDownList1 است.
2-Name که نام پاراکتر مربوطه است که در اينجا city است.
3-PropertName که نام خاصيتی از کنترلی است که پارامتر از آن تامين می شود.مثلا اگر کنترل ما TextBox باشد اين خاصيت مقدار SelectedValue را به خود اختصاص می دھد.
اين متدھا و خواص در قسمت Properties از Visual Studio نيز قابل دسترسی و تنظيم ھستند. در نھايت ھم کافی است نتيجه ی حاصل را در يک کنترل GridView نمايش دھيم:
<asp:GridView ID="GridView1" runat="server" DataSourceID="sqldatasource2"> </asp:GridView>
ھمچنين شما می توانيد برای جلوگيری از شلوغی که Query ھای Sql ايجاد ميکنند و بالا رفتن کارايی سايت از StoredProcedure استفاده کنيد.اگر بخواھيم مثال بالا را با StoredProcedure تنجام دھيم بايد نام StoredProcedure که در اينجا sss است به خاصيت SelectCommand نسبت دھيم :
SelectCommand="sss"
و نوع آن را StoredProcedure ھم به صورت زير است:
CREATE PROCEDURE sss @city VarChar(20) AS SELECT customer_name,customer_street From customer Where customer_city=@city
پس کد کلی آن به صورت زير می شود:
<asp:SqlDataSource ID="sqldatasource1" runat="server" ConnectionString="<%$ ConnectionStrings:aaa %>" ProviderName="System.Data.SqlClient" SelectCommand="SELECT DISTINCT customer_city FROM customer"> </asp:SqlDataSource> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:aaa %>" ProviderName="System.Data.SqlClient" SelectCommand="sss" SelectCommandType="StoredProcedure" > <SelectParameters> <asp:ControlParameter ControlID="DropDownList1" Name="city" PropertyName="SelectedValue" /> </SelectParameters> </asp:SqlDataSource> </div> <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="sqldatasource1" DataTextField="customer_city" AutoPostBack="true"> </asp:DropDownList><br /> <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource2"> </asp:GridView>
ھمه چيز مثل قبل است از جمله نحوه ی تعريف و مقدار دھی پارامتر ھا. نکته ی کلی اين است که در اينجا می توانستيد مقادير مختلف پارامتر را سایت به صرت Visual در قسمت Command And Parameter Editor نيز انجام بدھيد تا از کد نويسی طولانی خلاص شويد. و به بهینه سازی سایت کمک شود.
حالا در زير می خواھيم يک مثال با ھم ببينيم که پارامتر ھا در آن از يک QueryString تامين شوند.برای اين مثال اين طور در نظر می گيريم که اسامی شھرھا در يک ListBox به صورت غير تکراری قرار گرفته باشند و يک دکمه ھم در آنجا باشد.وقتی روی دکمه کليک کنيم ايتم انتخاب شده در ListBox با QueryString به يک صفحه ی ديگری منتقل شود و در آنجااز اين QueryString که منتقل شده به عنوان پارامتر نام شھر برای بازيابی مشتريانی که در آن شھر زندگی می کنند استفاده می کنيم. پس ابتدا صفحه ی اول را طراحی کنيم.اول يک کنترل SqlDataSource دران قرارداده و نام شھر ھا را به طورغير تکراری بازيابی می کنيم:
<asp:SqlDataSource ID="sqldatasource1" runat="server" ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:aaa %>" SelectCommand="SELECT DISTINCT customer_city FROM customer"> </asp:SqlDataSource>
سپس يک کنترل ListBox در صفحه قرار داده و منبع داده ای آن را کنترل SqlDataSource در نظر گرفته و يادتان باشد خاصيت DataTextField نيز برايش تعريف کنيم:
<asp:ListBox ID="listbox1" runat="server" DataSourceID="sqldatasource1" DataTextField="customer_city"></asp:ListBox>
سپس يک دکمه در صفحه قرار داده:
<asp:Button ID="Button1" runat="server" Text="Button" />
و در رويداد کليکش QueryString مربوطه را ارسال ميکنيم:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Response.Redirect("Default5.aspx?city=" & listbox1.SelectedValue) End Sub
اين نکته راھم بگويم که شما می توانستيد يک تابع به صورت زير بنويسيد:
Sub btn_click() Response.Redirect("Default5.aspx?city=" & listbox1.SelectedValue) End Sub
وسپس دکمه را به اين صورت تعريف کنيد:
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="btn_click" /
ھمانطور که ميبينيد در خصوصيت OnClick در آن تابع مربوطه را صدا زديم. حالا کار صفحه ی اول تمام است و به سراغ صفحه ی دوم می رويم.و کد تعريف کنترل SqlDataSource را به صورت زير می نويسيم:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:aaa %>" SelectCommand="sss" SelectCommandType="StoredProcedure"> </asp:SqlDataSource>
ھمانطور که می بينيددر اينجا ما از ھمان StoredProcedures به نام sss که بالاتر تعريف کرده بوديم استفاده کرديم.حال نوبت به تعريف پارامتر می رسد.چون پارامتر ما برای عمليات select است پس از SelectCommand استفاده می کنيم.سپس از آنجايی که نوع ان از QueryString تامين می شود پس از تگ <asp:QueryStringParameter> استفاده می کنيم که حداقل خصوصياتی که در آن بايد مقداردھی میشود. 2 تا است اولی نام پارامتر در Query مربوطه و دومی QueryStringField نام متغيری که Value مربوطه در ان وجود دارد و از صفحه ی قبلی ارسال شده.
<SelectParameters>
<asp:QueryStringParameter Name="city" QueryStringField="city" />
</SelectParameters>
طراحی سایت الو وب
دیدگاهتان را بنویسید