پاسخ : آموزش ASP.NET [h=2]آپلود و ارسال فایل ها به سرور با کنترل FileUpload[/h] معرفی کنترل FileUpload : کنترل FileUpload در صفحات ASP.Net ، این امکان را به کاربران شما می دهند تا فایل های مورد نظر خود را به سرور سایت شما آپلود ( Upload ) نمایند . برای مثال فرض کنید در سایت شما هر کاربری که ثبت نام نماید ، بایستی یک عکس درباره خود را با فرمت jpg و حداکثر سایز 40 KB ، برای شما ارسال نماید . برای انجام این کار می توانید از کنترل FileUpload به راحتی استفاده نمایید . کنترل FileUpload این امکانات را در اختیار شما قرار می دهد : کاربران سایت شما فایل های مورد نظر خود را به آدرس تعیین شده بر روی سایت آپلود نمایند . سایز فایلی که کاربر می خواهد بر روی سایت ارسال نماید را محدود نمایید . مثلا یک حداکثر سایز برای آن تعیین نمایید . خصوصیات فایل های آپلود شده را بررسی نموده و در صورت صحیح بودن بر روی سرور ذخیره شوند . شکل کلی تعریف و نمایش دکمه فرمان FileUpload در صفحه های ASP.Net به صورت زیر است : [TABLE="class: ex"] [TR] [TD="class: prname"] Syntax [/TD] [TD="class: prdes, align: left"] < asp:FileUpload ID="FileUpload1" runat="server" / > [/TD] [/TR] [/TABLE] کنترل FileUpload چگونه کار می کند : کنترل FileUpload این امکان را برای کاربران سایت های ASP.Net فراهم می کند تا بتوانند انواع فایل های مورد نظر خود از جمله عکس ، فایل های متنی و ... را به سرور سایت آپلود نمایند . این کنترل یک کادر متن ( کنترل TextBox ) را به کاربر نمایش می دهد تا وی بتواند آدرس و نام فایل مورد نظر خود را در آن وارد کرده و به سرور ارسال نماید . این کنترل همچنین یک دکمه Browse را به کاربر نمایش می دهد که با فشردن آن ، یک کادر انتخابی Dialog Box باز می شود . توسط این کادر ، کاربر می تواند به جستجوی فایل مورد نظر خود بر روی کامپیوتر ، پرداخته و پس از انتخاب آن ، فایل را به سرور آپلود نماید . مدیریت فایل های آپلود شده : هنگامی که کاربر فایل خود را انتخاب کرده و سپس با ارسال آن ، صفحه را postback می کند ، فایل به همراه درخواست آن به سرور آپلود می شود . این فایل پس از آپلود در حافظه موقت سرور قرار گرفته و در صورت تایید در حافظه ثابت و در مسیر تعیین شده ذخیره خواهد شد . شما می توانید از طریق های زیر به فایل آپلود شده و خصوصیات آن دسترسی داشته باشید : به عنوان آرایه ای از byte ها : در این حالت فایل توسط خاصیت FileBytes کنترل FileUpload قابل دسترسی خواهد بود . در مثال های عملی این بخش ، طرز کار با این حالت را نمایش داده ایم . به عنوان جریانی از داده ها : در این حالت فایل توسط خاصیت FileContent کنترل FileUpload قابل دسترسی خواهد بود . در مثال های عملی این بخش ، طرز کار با این حالت را نمایش داده ایم . به عنوان یک شی از نوع HttpPostedFile : در این حالت فایل توسط خاصیت PostedFile کنترل FileUpload قابل دسترسی خواهد بود . در این حالت به وسیله خواص ContentType و ContentLengh خاصیت PostedFile ، می توان به خواص فایل دسترسی داشته و آنها را کنترل و برنامه ریزی نمود . در مثال های عملی این بخش ، طرز کار با این حالت را نمایش داده ایم . مثال های عملی کار با کنترل FileUpload : در مثال های زیر کار با کنترل FileUpload را در مدیریت فایل های آپلود شده به سرور در عمل نمایش داده شده است : مثال 1 : کنترل سایز فایل آپلود شده : در مثال اول یک کنترل FileUpload را قرار داده ایم که کاربر می تواند فایل مورد نظر خود برای آپلود به سرور انتخاب نماید . سپس با کلیک بر روی دکمه فرمان BtnUpload درخواست آپلود به سرور ارسال می شود . برنامه با کلیک بر روی دکمه فرمان BtnUpload تابع Confirm_Upload را فراخوانی می کند . کد این تابع در فایل کد صفحه ASP.Net وجود دارد . این تابع در صورتی که سایز فایل بیش از 20000 Bytes باشد ، عملیات آپلود فایل را کنسل کرده و یک پیام هشدار به کاربر ارسال می کند . در غیر این صورت فایل آپلود می شود : نکته مهم : در این مثال کد لازم برای هر 3 حالت کار با کنترل FileUpload را قرار داده ایم . توجه داشته باشید ، فقط یکی از دستورات if کافی است : [TABLE="class: ex"] [TR] [TD="class: prname"] مثال [/TD] [TD="class: prdes, align: left"] <asp:FileUpload ID = " FileUpload1 " runat = " server " /> <asp:Button runat = " server " ID = " BtnUpload " OnClick = " Confirm_Upload " Text=" Click to Upload File " /> <asp:Label ID = " lblMassage " runat = " server " Text = " " ></asp:Label> [/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: prname"] کد پست صحنه در فایل کد صفحه [/TD] [TD="class: prdes, align: left"] protected void Confirm_Upload (object sender, EventArgs e) { // if ( FileUpload1.FileBytes.Length > 20000 ) // کد لازم در حالت اول // if ( FileUpload1.FileContent.Length > 20000 ) // کد لازم در حالت دوم if ( FileUpload1.PostedFile.ContentLength > 20000 ) // کد لازم در حالت سوم { lblMassage.Text = "اندازه فایل بیش از حد مجاز است"; } } [/TD] [/TR] [/TABLE] مثال 2 : کنترل نوع فایل آپلود شده : در مثال دوم نیز یک کنترل FileUpload را قرار داده ایم که کاربر می تواند فایل مورد نظر خود برای آپلود به سرور انتخاب نماید . سپس با کلیک بر روی دکمه فرمان BtnUpload درخواست آپلود به سرور ارسال می شود . برنامه با کلیک بر روی دکمه فرمان BtnUpload تابع Confirm_Upload را فراخوانی می کند . این تابع نوع فایل آپلود شده را بررسی کرده و چنانچه از نوع عکس و با فرمت jpg نباشد ، یک پیام هشدار به کاربر نمایش داده و عملیات آپلود فایل متوقف می شود . در غیر این صورت فایل آپلود می شود : [TABLE="class: ex"] [TR] [TD="class: prname"] مثال [/TD] [TD="class: prdes, align: left"] <asp:FileUpload ID = " FileUpload1 " runat = " server " /> <asp:Button runat = " server " ID = " BtnUpload " OnClick = " Confirm_Upload " Text=" Click to Upload File " /> <asp:Label ID = " lblMassage " runat = " server " Text = " " ></asp:Label> [/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: prname"] کد پست صحنه در فایل کد صفحه [/TD] [TD="class: prdes, align: left"] protected void Confirm_Upload (object sender, EventArgs e) { if ( FileUpload1.PostedFile.ContentType != "image/jpeg" ) { lblMassage.Text = " فایل باید فرمت jpg داشته باشد"; } } [/TD] [/TR] [/TABLE]
پاسخ : آموزش ASP.NET [h=2]مقدمه و معرفی کنترل های سرور داده[/h] مقدمه سرور های کنترل داده : ASP.NET شامل مجموعه ای از کنترل های داده ( data source Controls ) است ، که به شما امکان می دهد تا به منابع مختلف اطلاعات همچون پایگاه داده های مختلف ، فایل های XML و ساير اشیای داده ای متصل شده ، از آنها اطلاعات دريافت کرده و یا اطلاعات آنها را حذف ، اضافه و یا به روز کنيد . اين کنترل ها به طور مستقيم به منبع اطلاعاتی متصل شده و از آن اطلاعات مورد نظر را دريافت کرده و يا به آن پاس می دهند . به عبارت ديگر کنترل های داده همانند پل ارتباطی بین منبع داده و کنترل هایی که شما برای نمایش و یا ویرایش اطلاعات در صفحات ASP.NET از آنها استفاده می کنيد ، عمل کرده و باعث می شوند تا سایر کنترل ها از اطلاعات به دست آمده استفاده کنند . در واقع آنها اطلاعات را برای کنترل های ديگر فراهم می کنند و خود قادر به نمايش آنها نيستند . همانطور که در بخش های بعد توضيح خواهيم داد ، ما در صفحات ASP.NET برای نمايش منظم اطلاعات يک پايگاه داده در قالب هايي مانند جدول یا فرم ها ، از کنترل هایی مانند GridView ، FormView و یا DetailsView استفاده می کنيم . به اين کنترل ها در اصطلاح کنترل های وب یا data-bound Controls می گوييم و اين کنترل ها امکان اتصال مستقيم به يک پايگاه داده را ندارند و بايستی از طريق يک کنترل داده ای مناسب عمل اتصال و دريافت اطلاعات را انجام دهند . در واقع کنترل های وب به کنترل های داده و به نوبت هم کنترل های داده به پايگاه داده متصل می شوند . به عبارت ديگر رابطه زير بين کنترل های ASP.NET و منبع داده ای بر قرار است : منبع داده ای کنترل داده کنترل وب کنترل های داده هيچ گونه خروجی ظاهری و قابل مشاهده بر روی صفحه ندارند و فقط در بخش کد نویسی صفحه قابل دسترسی و تغيير هسنتد . در اين بخش ما به معرفی خلاصه کنترل های داده ASP.NET که در ليست زير نمايش داده شده اند پرداخته و در بخش های آینده آنها را به طور مفصل تر شرح خواهيم داد : ObjectDataSource SqlDataSource AccessDataSource XmlDataSource SiteMapDataSource [HR][/HR] معرفی کنترل های داده ASP.NET : 1 ) کنترل داده ObjectDataSource : 2 ) کنترل داده SqlDataSource : کنترل SqlDataSource برای اتصال به يک پايگاه داده SQL Server ، OLB DB ، ACCESS و یا Oracle استفاده می شود . اين کنترل توانایی دريافت اطلاعات از منابع ذکر شده و همچنين حذف ، اضافه و یا به روز کردن اطلاعات در آنها را داراست . اين کنترل برای دريافت و ويرایش اطلاعات می تواند از دستورات مستقیم SQL که توسط کاربر و یا برنامه تعيين می شود و یا توابع آماده ( Stored Procedure ) استفاده کند . کاربر بايستی دستورات SQL لازم برای عملیات های Select , Insert , Update و یا Delete را در خواص مربوطه آنها در کنترل ، تعيين کند . 3 ) AccessDataSource : کنترل AccessDataSource يک نسخه ويژه از کنترل SqlDataSource است که برای اتصال به يک پايگاه داده Microsoft Access طراحی شده است و توانایی ايجاد ارتباط با فایل های mdb. را داراست . همانند کنترل SqlDataSource ، شما می نوانيد دستورات صريح و مستقیمی برای اعمال مختلف اين کنترل از جمله Select , Insert , Update و ... را به زبان SQL تعيين کنید . 4 ) XmlDataSource : کنترل XmlDataSource ، توانایی خواندن و نوشتن در فایل های XML را داراست ، بنابراين شما می توانيد از آن برای اتصال و دریافت اطلاعات و نيز به روز رسانی فایل های XML استفاده کنيد . اين کنترل در واقع تامين کننده داده از منابع XML برای کنترل هایی همچون TreeView يا Menu است که با ساختار ترتیبی و درختی که مخصوص نوع داده ای فایل های XML است ، کار می کنند . 5 ) SiteMapDataSource : کنترل SiteMapDataSource برای کار با نقشه سايتها در ASP.NET طراحی شده است و توانایی ايجاد و دريافت اطلاعات لازم را برای عمليات پیمایش در سایت را داراست . نقشه سايت يک توصيف از کليه صفحه ها و زير صفحه های موجود در يک سايت است ، که به زبان XML طراحی می شود . اين کنترل توانایی اتصال به اين نوع فايل ها را داراست و کنترل های ديگر همانند Menu و يا TreeView می توانند از امکانات و اطلاعات فراهم شده توسط اين کنترل ، برای ايجاد منوهای ترتيبی جهت پیمایش سايت استفاده کنند .
پاسخ : آموزش ASP.NET [h=2]اتصال به کنترل های داده در ASP.NET[/h] اتصال به کنترل داده همانطور که در قسمت قبل توضيح داديم ، برای اتصال به يک منبع اطلاعاتی ( مثلا يک پايگاه داده SQL Server و يا Access ) ، بايستی ابتدا يک کنترل داده مرتبط به آن نوع منبع اطلاعاتی مثل کنترل SqlDataSource و يا AccessDataSource را به منبع اطلاعاتی متصل کرده و سپس يک کنترل وب که قادر به نمايش اطلاعات به دست آمده است مثل يک کنترل FormView یا GridView را به کنترل داده متصل کنيم . در این حالت کنترل داده در مواقع درخواست شده به پايگاه داده متصل شده و اطلاعات لازم را از آن دريافت می کند . سپس کنترل وب متصل به کنترل داده ، اطلاعات دریافتی را قالب بندی کرده و نمایش می دهد . بنابراین کنترل های داده خود قادر به نمايش اطلاعات به دست آمده نيستند و فقط در نقش تامين کننده اطلاعات درخواستی به کار می روند . با استفاده از ترکيب يک کنترل داده و يک کنترل وب می توانيد به راحتی و با حجم بسیار پايين کدنويسی ، اطلاعات موجود در هر منبع داده ای را خوانده ، حذف ، ويرایش ، صفحه بندی و یا مرتب سازی کنید . [HR][/HR] اتصال يک کنترل وب به يک کنترل داده : به طور کلی 2 روش برای اتصال يک کنترل وب به يک کنترل داده وجود دارند که عبارتند از : اتصال در محيط کدنويسی با استفاده از خاصيت DataSourceID اتصال با استفاده از محيط طراحی ( Design ) در نرم افزار Visual Studio 2005 در ادامه به معرفی و توضيح دو روش فوق می پردازيم : 1 ) اتصال در محيط کدنويسی با استفاده از خاصيت DataSourceID : برای اينکه يک کنتزل وب را به يک کنترل داده متصل کنيم ، بايستی خاصيت DataSourceID کنترل وب را برابر با مقدار ID کنترل داده قرار دهیم . برای مثال اگر يک کنترل داده SqlDataSource داشته باشيم که ID آن برابر با SqlControl1 بوده و قبلا به يک پايگاه داده SQL Server متصل شده است و بخواهيم يک کنترل وب از نوع GridView را به آن مرتبط سازيم ، بايد مقدار خاصيت DataSourceID کنترل GridView را برابر با مقدار ID کنترل SqlDataSource مورد نظر یعنی SqlControl1 قرار دهيم . مثال 1 : در مثال زير يک کنترل GridView را به يک کنترل SqlDataSource که ID آن برابر با SqlControl1 است ، متصل ساخته ايم : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlControl1"> </asp:GridView> <asp:SqlDataSource ID="SqlControl1" runat="server" ConnectionString="<%$ ConnectionStrings:Univer_Connection %>" SelectCommand="Select * from Students"> </asp:SqlDataSource> < form > [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] مثال 1 : در مثال زير يک کنترل FormView را به يک کنترل AccessDataSource که ID آن برابر با Access_EX است ، متصل ساخته ايم : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] <form id="form1" runat="server"> <asp:FormView ID="FormView1" runat="server" DataSourceID="Access_EX"> </asp:FormView> <asp:AccessDataSource ID="Access_EX" runat="server" DataFile="~/App_Data/Payment.mdb" </asp:AccessDataSource> < form > [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] 2 ) اتصال يک کنترل وب به يک کنترل داده در محيط طراحی ( Design ) در نرم افزار Visual Studio 2005: ابتدا فايل صفحه را در برنامه باز کرده و موارد زير را به ترتيب اجرا کنيد . * نکته : برای آموزش اين بخش ، از مثالی استفاده می کنيم که در آن می خواهيم يک کنترل وب GridView را به يک کنترل داده SqlDataSource متصل کنيم . در اين مثال فرض می کنيم ، که کنترل SqlDataSource قبلا بر روی صفحه وجود داشته و به يک پايگاه داده SQL Server متصل شده است . برای دريافت اطلاعات راجع به نحوه اتصال کنترل SqlDataSource به پايگاها داده به بخش آموزش اتصال يک کنترل SqlDataSource به پايگاه داده برويد . برنامه را در حالت Design قرار داده و سپس يک کنترل GridView را از منوی Toolbox بر روی صفحه اضافه کنيد . بر روی کنترل GridView کليک سمت راست کرده و از منوی ظاهر شده ، گزينه Show Smart Tag را انتخاب کنيد . منوی GridView Tasks ظاهر شده و در قسمت Choose Data Source ،مقدار ID کنترل SqlDataSource مورد نظر را از کادر کشویی آن انتخاب کرده و به محيط طراحی باز گرديد . هم اکنون دو کنترل GridView و SqlDataSource به هم متصل بوده و کنترل GridView می تواند از اطلاعات فراهم شده توسط کنترل SqlDataSource استفاده کرده و به پايگاه داده آن متصل شود . نکته 2 : هر دو روش ذکر شده ، خروجی يکسانی را در قسمت کدنويسی ايجاد می کنند . در واقع در روش دوم برنامه به طور اتوماتيک کد لازم را برای ارتباط دو کنترل ايجاد می کند و تنها تفاوت آنها اين است که در روش دوم از محيط تصويری ( Visual ) اسفاده می کنيم . اگر پس از انجام روش دوم به قسمت کدنويسی برويد ، خواهيد ديد که خاصيت DataSourceID کنترل GridView برابر ID کنترل SqlDataSource شده است . نکته 3 : در آینده می توانيد با تغيير مقدار خاصيت DataSourceID کنترل GridView آن کنترل را به هر کنترل وب دلخواه ديگر متصل کنيد .
پاسخ : آموزش ASP.NET [h=2]انتخاب اطلاعات مورد نظر توسط کنترل های داده[/h] مقدمه : پس از اينکه کنترل وب مورد نظر خود را به کنترل داده متصل ساختيد و ارتباط بين آنها بر قرار شد ، مرحله بعدی انتخاب اطلاعاتی است که شما می خواهيد تا کنترل داده از منبع اطلاعاتی دريافت کرده و سپس توسط کنترل وب نمايش دهد . در اين قسمت بايد توجه داشته باشيد که عمليات انتخاب داده توسط کنترل داده تعيين و اجرا شده و نه کنترل وب . در واقع کنترل وب ، فقط نمايش دهنده اطلاعاتی است که کنترل داده فراهم کرده و خود نقشی در دستورات انتخاب داده ندارد . فرض کنيد که شما يک پايگاه داده مربوط به يک دانشگاه را در اختيار داريد . در اين پايگاه داده ، جدول های مختلفی وجود دارد که هر کدام اطلاعات گروه خاصی مثل دانشجويان ، اساتيد و ... را در خود جای داده اند . شما می خواهيد در صفحات مختلف برنامه خود ، هر قسمت اطلاعات مربوط به يک جدول را نشان داده و برخی از قسمت ها هم فقط اطلاعات خاصی را به کاربر نمايش دهد . برای مثال می خواهيد در يک قسمت اطلاعات عمومی دانشجويان و در قسمت ديگر فقط ريز نمرات آنها را نمايش دهید . در اين حالت بایستی دستورات لازم برای مدل های مختلف انتخاب داده را تعيين کنيد . کنترل های داده روش های مختلفی را برای تعيين داده های انتخابی دارند که در ادامه آنها را بررسی می کنيم : 1 ) کنترل ObjectDataSource : کنترل ObjectDataSource ، برای خواندن اطلاعات مورد نظر از پايگاه داده ، متدی که نام آن در خاصيت SelectMethod کنترل تعيين شده است را فراخوانی و اجرا می کند . برای مثال فرض کنيد که در يک کنترل ObjectDataSource ، يک متد جهت فراخوانی داده به نام GetAllStudents طراحی کرده ايم ، که اطلاعات عمومی دانشجويان را از پايگاه داده انتخاب و دريافت می کند . بنابراین بايد مقدار خاصيت SelectMethod کنترل را برابر با نام متد مورد نظر ِیعنی GetAllStudents قرار دهيم . در زمان اجرا برنامه ، کنترل متد تعيين شده را فراخوانی کرده و بر حسب آن اطلاعات درخواستی را دريافت نموده و به کنترل وب متصل جهت نمايش ارسال می کند . مثال 1 : در مثال زير يک کنترل ObjectDataSource و يک کنترل GridView را ايجاد کرده ايم . همچنين يک متد به نام GetAllStudents را برای دريافت اطلاعات از منبع داده ای در خاصيت SelectMethod آن تعيين کرده ايم : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1"> </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod = "GetAllStudents" typename ="Sample.AspNet.CS.Students"> </asp:ObjectDataSource> < form > [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] 1 ) کنترل های SqlDataSource و AccessDataSource : کنترل های SqlDataSource و AccessDataSource برای انتخاب اطلاعات مورد نظر از پايگاه داده ، دستور SQL تعيين شده در خاصيت SelectCommand خود را اجرا می کنند . روش استفاده شده به اين شرح است گه برنامه نويس بايستی یک دستور مناسب به زبان SQL را برای داده های که می خواهد از پايگاه داده دريافت کند را در خاصيت SelectCommand کنترل قرار دهد . کنترل در هنگام اجرا ، اين دستور SQL را برای دريافت اطلاعات مورد استفاده قرار می دهد . همچنين کنترل های SqlDataSource و AccessDataSource می توانند از توابع آماده SQL یا Stored Procedure نيز برای انتخاب داده استفاده کنند . توابع آماده دستورات SQL هسنتد که در قالب رويه هایی آماده از قبل در برنامه طراحی شده و در قسمت Stored Procedure پايگاه داده مربوطه نگهداری می شوند . چنانچه بخواهيم از توابع آماده در انتخاب اطلاعات استفاده کنيم ، بايد مقدار خاصيت SelectCommand کنترل را برابر با نام تابع آماده مورد نظر قرار داده و همچنين مقدار خاصيت SelectCommandType کنترل را بر روی مقدار Stored Procedure تنظيم کنيم .در مثال های زير موارد ذکر شده را به صورت عملی نمايش می دهيم : مثال 2 : در مثال زير يک کنترل AccessDataSource و يک کنترل FormView را بر روی صفحه قرار داده و آنها را به هم متصل ساخته ايم . سپس دستور لازم برای دريافت اطلاعات توسط کنترل AccessDataSource از پايگاه داده MyAccessDataBase.mdb را در خاصيت SelectCommand آن تعيين کرده ايم . اين کنترل بايستی کليه اطلاعات دانشجويان را از جدول Students دريافت کرده و برای نمايش به کنترل FormView ارسال کند : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] <form id="form2" runat="server"> <asp:FormView ID="FormView1" runat="server" DataSourceID="Access_EX"> </asp:FormView> <asp:AccessDataSource ID="Access_EX" runat="server" DataFile="~/App_Data/MyAccessDataBase.mdb" SelectCommand = "Select * From Students" </asp:AccessDataSource> < form > [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] مثال 3 : در مثال زير يک کنترل SqlDataSource و يک کنترل FormView را بر روی صفحه قرار داده و آنها را به هم متصل ساخته ايم . سپس دستور لازم برای دريافت اطلاعات توسط کنترل SqlDataSource از پايگاه داده را در خاصيت SelectCommand آن تعيين کرده ايم . اين کنترل بايستی کليه اطلاعات دانشجويان را از جدول Students دريافت کرده و برای نمايش به کنترل FormView ارسال کند : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] <form id="form2" runat="server"> <asp:FormView ID="FormView1" runat="server" DataSourceID="SqlControl1"> </asp:FormView> <asp:SqlDataSource ID="SqlControl1" runat="server" SelectCommand = "Select * From Students" ConnectionString="<%$ ConnectionStrings:Univer_Connection %>" </asp:SqlDataSource> < form > [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] مثال 3 : مثال قبل را بازنويسی کرده ايم ، که در آن کنترل SqlDataSpurce برای دريافت اطلاعات از پايگاه داده باید تابع آماده MyFunction را اجرا کند . توجه شود که مفدار خاصيت SelectCommandType کنترل را نيز با مقدار Stored Procedure تنظيم کرده ايم : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] <form id="form3" runat="server"> <asp:FormView ID="FormView1" runat="server" DataSourceID="SqlControl1"> </asp:FormView> <asp:SqlDataSource ID="SqlControl1" runat="server" SelectCommand = "MyFunction" SelectCommandType = "Stored Procedure" ConnectionString="<%$ ConnectionStrings:Univer_Connection %>" </asp:SqlDataSource> < form > [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE]
پاسخ : آموزش ASP.NET [h=2]استفاده از پارامترها با کنترل های داده - 1[/h] مفهوم و دليل استفاده از پارامترها : کنترل های سرور داده می توانند پارامترهایی را به عنوان مقدار ورودی دريافت کنند که به وسيله آنها می توانيد مقادير مورد نظر خود را در زمان اجرا به آنها ارسال کنيد . پارامترهای ارسالی در موارد بسياری به کار برده می شوند . شما می توانيد از پارامترهای ارسالی برای تامين مقادير لازم جهت جستجو و دريافت اطلاعات از منبع اطلاعاتی استفاده کرده و يا مقاديری جديدی را که می خواهيد به پايگاه داده وارد شوند را تعیین نمايید . همچنين می توانيد پارامترها را برای حذف و يا ويرايش اطلاعات در يک منبع داده ای و يا برای عمليات هایی مثل صفحه بندی ( Paging ) ، مرتب سازی ( Sorting ) و یا فيلترينگ داده ها استفاده کنيد . برای مثال در يک جدول بانک اطلاعاتی می خواهيد ، اطلاعات دانشجويان يک رشته خاص را بازیابی کنيد ، برای اين منظور شما بايستی نام رشته مورد نظر را توسط يک پارامتر به دستور SQL طراحی شده برای عمليات جستجو و فراخوانی اطلاعات ( خاصيت SelectCommand کنترل های سرور داده ) ، ارسال کنيد . یا در جايي ديگر می خواهيد ، اطلاعات افراد جديدی را به جدول اضافه کنيد ، در اين حالت نيز بايد داده های جديد را توسط پارامترهای خاص به کنترل ها ارسال کنيد . منابع دريافت پارامترها : شما می توانيد پارارمترهای ورودی را از منابع مختلفی تامين کنيد که از آن جمله می توان به کنترل های ورود داده در صفحات وب ASP.NET مثل کنترل TextBox و یا کادر های متن ، کوکی های HTML صفحه ، خصوصيات کاربران ( User Profile ) و ... اشاره کرد . برای مثال کاربر می تواند نام رشته مورد نظر خود را در يک کادر متن تعيين شده وارد کند و یا اطلاعات دانشجويان جديد را برای اضافه شدن به پايگاه داده در يک فرم HTML قرار دهد . [HR][/HR] انواع پارامترها : پارامترهای ارسالی به کنترل های سرور داده در صفحات ASP.NET دارای انواع مختلفی هستند . نوع پارمتر ارسالی تعيين کننده اين است که مقدار آن پارامتر از کجا آمده است . در ادامه به معرفی و توضيح پارامترهای اصلی و پر کاربرد که در برنامه های ASP.NET از آنها استفاده می شود ، می پردازيم : 1 ) پارامتر ControlParameter : این پارامتر برای دریافت مقدار يک کنترل موجود بر روی يک صفحه ASP.NET استفاده می شود . برای مثال به مقدار متنی يک کنترل کادر متن TextBox که در خاصيت Text آن نگهداری می شود و یا مقدار انتخاب شده در يک کنترل کادر انتخابی DropDownList که توسط خاصيت SelectedValue برگردانده می شود ، اشاره کرد . در اين نوع پارامتر کنترل تامين کننده مقدار را با خاصيت ControlID تعيين می شود . همچنين نام خاصيتی در کنترل که مقدار پارامتر را تعيين می کند را با استفاده از خاصيت PropertyName مشخص می گردد . همچنين چنانچه کنترل مورد نظر روی صفحه وجود نداشته باشد و یا خاصيت تعيين شده آن برای پارامتر مقدار دهی نشده باشد ، می توان برای آن توسط خاصیت DefaultValue يک مقدار پيش فرض تعيين کرد ، که در موارد ذکر شده پارامتر با آن مقدار دهی می شود . مثال 1 : در زير يک پارامتر را تعيين کرده ايم ، که مقدار مته درون يک کنترل کادر متن با ID ( TxtInsert ) را دريافت می کند . همچنين مقدار NoValue را به عنوان مقدار پيش فرض برای آن تعيين کرده ايم :: [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] < asp:ControlParameter ControlID = "TxtInsert" PropertyName="Text" DefaultValue ="NoValue" /> [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] برای مشاهده نحوه استفاده از يک پارامتر به صورت عملی و همراه با يک کنترل داده به بخش بعدی استفاده از پارامترها با کنترل های داده - 2 برويد . 2 ) پارامتر CookieParameter : اين پارامتر مقدار يک کوکی موجود بر روی صفحه را دریافت می کند . نام کوکی با استفاده از خاصيت HttpCookie تعيين شده و چنانچه کوکی مورد نظر بر روی صفحه وجود نداشته باشد و یا قبلا مقدار دهی نشده باشد ، می توان برای آن توسط خاصیت DefaultValue يک مقدار پيش فرض تعيين کرد ، که در موارد ذکر شده پارامتر با آن مقدار دهی می شود . نکته : در پارامترهای کوکی ، فقط کوکی های تک مقداری پذيرفته می شود . مثال 2 : در مثال زير يک پارامتر کوکی ايجاد کرده ايم که مقدار يک کوکی با نام UserID را دریافت کرده و مقدار پيش فرض Admin نيز برای آن تعيين شده است : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] < asp:CookieParameter CookieName="UserID" DefaultValue="Admin" /> [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] 3 ) پارامتر FormParameter : اين پارامتر مقدار يک فيلد را در يک فرم HTML دريافت می کند . نام فیلد مورد نظر را در پارامتر توسط خاصيت FormField تعيين می کنيم چنانچه فيلد مورد نظر روی صفحه وجود نداشته باشد و یا قبلا مقدار دهی نشده باشد ، می توان برای آن توسط خاصیت DefaultValue يک مقدار پيش فرض تعيين کرد ، که در موارد ذکر شده پارامتر با آن مقدار دهی می شود . مثال 3 : در مثال زير يک پارامتر فيلد فرم ايجاد کرده ايم که مقدار يک فيلد فرم HTML با نام NumField را دریافت کرده و مقدار پيش فرض Null نيز برای آن تعيين شده است : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] < asp:FieldParameter FormField="NumField" DefaultValue="Null" /> [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] [HR][/HR] تعيين نوع داده ای پارامتر : مسئله ديگر در مورد پارمتر ، نوع داده ای آن است . به طور پیش فرض ، پارامترها از نوع شی ( Object ) هستند ، ولی زمانی ممکن است که کاربر نوع داده ای خاص دیگری را مثل Int32 يا DateTime و ... را مد نظر داشته باشد . در اين صورت می توانيم نوع داده ای پارامتر را به طور صريح توسط خاصيت Type تعیین کنيم . مثال 4 :مثال شماره 1 را که در مورد پارامتر ControlParametere مجددا مورد استفاده قرار داده ايم ، ولی در اين بار نوع داده ای آن را نيز به نوع Int32 تعيين کرده ايم : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] < asp:ControlParameter ControlID = "TxtInsert" PropertyName="Text" DefaultValue ="NoValue" Type = Int32 /> [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE]
پاسخ : آموزش ASP.NET [h=2]استفاده از پارامترها با کنترل های داده - 2[/h] کنترل های سرور داده و پارامترها : در بخش قبل به تعريف پارامترها ، دليل و نحوه استفاده ، انواع و جهت آنها پرداختيم . اما در اين بخش می خواهيم به شما نحوه استفاده و کاربرد عملی آنها را در عمليات های گوناگون انتخاب ، ويرايش ، حذف و ... داده با استفاده از کنترل های سرور داده در ASP.NET را آموزش دهيم . همانطور که می دانيد ، پارامترها ماهيتی متغير دارند . یعنی مقدار آنها در ابتدا مشخص نيست و می تواند در هر لحظه تغيير کرده و بايستی از سوی کاربر و يا برنامه تعيين شود . برای استفاده از پارامترها همراه با کنترل های سرور داده ، بايد آنها را در دستورات انتخاب و ويرايش اطلاعات اين کنترل ها ايجاد کنيم . روش ايجاد پارامترها به شرح زير است : برای مثال يک کنترل SqlDataSource را در نظر بگيريد . اين کنترل برای انتخاب داده از منبع داده ای خود دستور SelectCommand را يک دستور به زبان SQL است را اجرا می کند . شما بايستی پارامترهای مورد نظر خود را به صورت نشانه هایی در دستورات SQL مربوط به هر يک از عمليات های داده ای قرار دهيد . برای اين منظور يک نام منحصر به فرد برای پارامتر انتخاب کرده و علامت @ را در ابتدای هر پارامتر در دستور SQL بگذارید . در اين صورت مقدار اين پارامتر بايد در زمان اجرا و توسط کاربر تعيين شود . برای درک بهتر اين مطلب به مثال زير توجه کنيد : مثال : برای مثال می خواهيم در جدول Students که در زير می بينيد و شامل مشخصات چندين دانشجو است ، در هر لحظه اطلاعات مربوط به يک دانشجو را که نام آن برابر با پارامتر Person است ، را انتخاب کرده و در يک جدول نمايش دهيم . برای اين منظور بايستی از دستور SQL به صورت زير استفاده کنيم : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] SelectCommand = " Select * From Students Where Name = @Person " [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 5"] Students Table [/TD] [/TR] [TR] [TD="class: header"] Id [/TD] [TD="class: header"] Name [/TD] [TD="class: header"] Family [/TD] [TD="class: header"] Major [/TD] [TD="class: header"] Garde [/TD] [/TR] [TR] [TD="class: body"] 1 [/TD] [TD="class: body"] Ali [/TD] [TD="class: body"] Mosavi [/TD] [TD="class: body"] HardWare [/TD] [TD="class: body"] 16 [/TD] [/TR] [TR] [TD="class: body"] 2 [/TD] [TD="class: body"] Soheil [/TD] [TD="class: body"] Maesomi [/TD] [TD="class: body"] SoftWare [/TD] [TD="class: body"] 18 [/TD] [/TR] [TR] [TD="class: body"] 3 [/TD] [TD="class: body"] Reza [/TD] [TD="class: body"] Kashani [/TD] [TD="class: body"] SoftWare [/TD] [TD="class: body"] 14 [/TD] [/TR] [TR] [TD="class: body"] 4 [/TD] [TD="class: body"] Sohrab [/TD] [TD="class: body"] Samadi [/TD] [TD="class: body"] HardWare [/TD] [TD="class: body"] 19 [/TD] [/TR] [/TABLE] بعد از اينکه پارامتر را در دستور SQL جاسازی و ايجاد کرديم ، بايد به نحوی مقدار آن را برای کنترل تامين کنيم . تامين مقدار اين پارامتر می تواند از طريق يکی از انواع پارامترهای ممکن در ASP.NET که در بخش قبلی معرفی کرديم ، صورت گيرد . کنترل های سرور داده برای دريافت مقادير پارامترهای ايجاد شده برای هر عمليات داده ای خاص مثل Insert , Delete , Update و يا Select ، از يک مجموعه پارامتر يا Parameter Collection خاص استفاده می کند . اين مجموعه ها بر عمليات های مختلف داده ای عبارتند از : SelectParameters : اين مجموعه نگهدارنده پارامترهای لازم برای عمليات انتخاب داده ، یعنی پارامترهای تعيين شده در دستور SelectCommand کنترل است . UpdateParameters : اين مجموعه نگهدارنده پارامترهای لازم برای عمليات ويرايش و به روز رسانی داده ، یعنی پارامترهای تعيين شده در دستور UpdateCommand کنترل است . DeleteParameters : اين مجموعه نگهدارنده پارامترهای لازم برای عمليات حذف داده ، یعنی پارامترهای تعيين شده در دستور DeleteCommand کنترل است . InsertParameters : اين مجموعه نگهدارنده پارامترهای لازم برای عمليات وارد کردن داده های جديد ، یعنی پارامترهای تعيين شده در دستور InsertCommand کنترل است . چنانچه برای هر يک از عمليات های داده ای فوق پارامتری در يکی از دستورات استفاده شده باشد ، بايد آن پارامتر را به طور کامل در مجموعه مربوط به ان تعريف شود . سپس کنترل در هنگام اجرای برنامه و رسيدن به هر يک از عمليات های مورد نظر ، مجموعه پارامتر يا پارامترهای آن را بررسی کرده و پارامترهای لازم را برای انجام عمليات ايجاد و مقداردهی می کند . برای درک بهتر مطالب اراثه شده به مثال های زير توجه کنيد : مثال 1 : در مثال زير يک کنترل SqlDataSource برای اتصال به پايگاه داده دانشگاه و جدول Students که مقادير آن را در قسمت بالا نمايش داده ايم ، استفاده کرده ايم . همچنين يک کنترل FormView را برای نمايش اطلاعات هر دانشجو انتخاب شده در کنترل DropDownList را قرار داده ايم . روش کار به اين صورت است که کنترل FormView به کنترل SqlDataSource متصل شده است و در هر لحظه اطلاعات مربوط به دانشجويي را نشان می دهد که نام خواندگی آن در کنترل DropDoanList انتخاب شده است . کنترل داده SqlDataSource که در واقع تامين کننده داده برای کنترل FormView است در دستور SelectCommand خود دارای يک پارامتر به نام Person است که مقدار آن وابسته به خاصيت SelectedValue کنترل DropDownList است ، يعنی موردی که در هر لحظه در آن کنترل انتخاب شده است . هر بار که مقدار انتخابی کنترل DropDownList را تغيير دهيد ، اين کنترل صفحه را Postback کرده و کنترل داده دوباره اطلاعات را با مفدار پارامتر جديد دريافت شده از منبع داده ای فراخوانی می کند . برای مشاهده نحوه عملی کار اين برنامه مقدار انتخاب شده در کنترل DropDownList را به دلخواه تغيير دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] <asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:Univer_Connection %> " SelectCommand="SELECT * FROM [Students] Where Family = @Person" > <SelectParameters> <asp:ControlParameter ControlID="DropDownList1" Name="Person" PropertyName="SelectedValue" DefaultValue="Maesomi" /> </SelectParameters> </asp:SqlDataSource> <aspetailsView ID="DetailsView1" runat="server" DataSourceID="SqlDataSource1" Width="200px" BorderColor="Blue"> </aspetailsView> <asp:Label ID="Label1" runat="server" Text="Select Family of the Student : " Font-Size="Medium" > <aspropDownList ID="DropDownList1" runat="server" AutoPostBack="true"> <asp:ListItem Selected="True"> Mosavi </asp:ListItem> <asp:ListItem> Maesomi </asp:ListItem> <asp:ListItem> Kashani </asp:ListItem> <asp:ListItem> Samadi </asp:ListItem> </aspropDownList> [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body, align: right"] با عرض پوزش تا آماده سازی Database سايت ، بخش های عملی مربوط به مثال های عملی پايگاه داده ، نمايش داده نمی شوند . اما می توانيد با شبيه سازی مثال ها در کامپيوتر های خود از آنها استفاده کنيد . [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE]
پاسخ : آموزش ASP.NET [h=2]چگونگی ايجاد پارامترها توسط کنترل های سرور داده[/h] هنگامی که شما يک کنترل وب همانند GridView , FormView و يا DetailsView را با يک کنترل سرور داده به کار می بريد ، کنترل وب می تواند نام و مقادير پارامترهای استفاده شده را بر حسب * Bound Field های خود به کنترل سرور داده ارسال کند . سپس کنترل سرور داده نام و مقادير پارامترهای دريافتی را با هم ترکيب کرده و در مجموعه پارامترهای لازم برای عمليات های Select يا Update استفاده می کند . Bound Field : کنترل های وب مانند GridView يا FormView اطلاعات دريافتی را به صورت جدول وار در سطرها و ستون ها نمايش می دهند . به هر يک از خانه های اين جدول ها ، يک Bound Field گفته می شود ، که نوع آن بايستی متن ( Text ) باشد . در واقع هر فيلد در رکورد ، يک Bound Field است . ديکشنری های ارسال شده به کنترل سرور داده : هنگامی که يک کنترل وب ، عملی مثل Select يا Update را از کنترل سرور داده درخواست می کند ، به همراه آن يک يا چند مجموعه IDictionary که شامل نام و مقادير پارامترهای ارسالی برای آن عمل داده ای است را به کنترل سرور داده ارسال می کند . اين ديکشنری ها برای هر پارامتر شامل يک جفت اطلاعات نام / مقدار ( Name / Value ) هستند ، که کنترل وب نام و مقادير آنها را از کنترل های فرزند و يا کنترل های متصل به خود استخراج می کند . برای مثال اگر يک کنترل وب را در حالت Edit Mode قرا بدهيد ، فيلدهای اطلاعاتی آن به صورت کادر متن يا کادر کشویی در می آيند . کنترل وب اطلاعات اين کنترل ها به همراه نام فيلد آنها را پس از ويرايش توسط کاربر ، در قالب يک مجموعه به کنترل وب ارسال می کند . همچنين برای اعمالی مانند Update يا Delete ، کنترل وب ممکن است يک ديکشنری خاص را که حاوی اطلاعات اصلی رکوردها ( يعنی اطلاعات رکورد قبلا از آنکه ويرايش يا حذف شود ) می باشد ، را به کنترل وب ارسال کند . جفتن های نام / مقدار برای پارامترها از طريق ديکشنری های زير به کنترل های سرور داده ارسال می شوند : مجموعه مقادير ( Values ): اين ديکشنری برای يک عمل ورود اطلاعات جديد ( Insert ) ارسال شده و شامل جفت نام / مقدار برای يک رکورد جديد است . مجموعه نام فيلدها و مقادير آنها از کنترل های فرزند کنترل وب که در يک مجموعه InsertItemTemplate قرار داشته و يا فيلد های يک کنترل DetailsView که خاصيت InsertVisible آن بر روی مقدار True تنظيم شده است ، استخراج می شود . مجموعه کليدها ( Keys ) : اين مجموعه برای عمليات های ويرايش ( Update ) و يا حذف ( Delete ) داده ، ارسال شده و شامل کليد اصلی و يا کليد فرعی برای رکوردی در جدول داده هاست که کنترل وب مورد نظر در حال ويرايش و يا حذف آن است . در واقع اين مجموعه آدرس رکوردی که قرار است حذف و يا ويرايش شود را به کنترل سرور داده ارسال می کند . اگر امکان ويرايش کليدها نيز وجود داشته باشد ، اين مجموعه شامل مقادير اصلی کليد رکورد قبل از اينکه ويرايش شود ، نيز هست . هنگامی که يک کنترل وب ،اطلاعات ارسالی از طرف يک کنترل داده را رديافت می کند ، آنها را در حافظه * ViewState خود نگهداری می کند و در زمانی که عمليات Update و يا Delete را انجام می دهد ، مجموعه کليد های دريافتی را با اطلاعات موجود در حافظه ViewState خود تلفيق می کند . اگر خاصيت ViewState کنترل وب مورد استفاده ، بر روی مقدار False تنظيم شده باشد ، اطلاعات مجموعه کليدها به تنهایی در کنترل وب استفاده شده و قبلا اطلاعاتی در حافظه ViewState آن ذخيره نشده است ، که با مجموعه کليدها تلفيق شود . * حافظه ViewState : اين حافظه يکی از خواص برخی از کنترل های ASP.NET است ، که اطلاعات مختلفی از جمله اطلاعات سرور ، مقادير داده ها و پارامترهای ارسالی و ... را در خود نگهداری کرده و می توان آنها را بعدا مورد استفاده قرار داد . برای فعال سازي اين حافظه بايد خاصيت EnableViewState کنترل را بر روی مقدار True تنظيم کرد . مجموعه مقادير جديد ( New Values ) : اين مجموعه برای يک عمل Update ارسال می شود و شامل جفت های نام / مقدار جديد برای رکوردی است که می خواهد ويرايش شود . اين مجموعه داده های جديدی را که بايد بهع منبع داده ای ارسال شود را نگهداری می کند . نام فيلدها و مقاديرشان برای مجموعه New Values از کنترل های فرزند کنترل وب که در مجموعه EdititemTemplate و یا bound Field های يک کنترل DetailsView که خاصيت ReadOnly آن روی مقدار False تنظيم شده است ، استخراج می شود .
پاسخ : آموزش ASP.NET [h=2]مقدمه و معرفی کنترل SqlDataSource[/h] معرفی کنترل SqlDataSource : کنترل SqlDataSource يکی از کنترل های سرور داده پرکاربرد در ASP.NET است ، که به شما امکان اتصال به انواع مختلفی از منابع داده ای همچون پايگاه داده SQL Server ، Access ، Oracle و يا منابع داده ای OLE DB يا ODBC را می دهد . کنترل SqlDataSource ، همانند ساير کنترل های سرور داده خود قادر به نمايش و يا ويرايش اطلاعات منابع داده ای نيست و برای اين منظور بايستی اين کنترل را به همراه يک کنترل وب ديگر که قادر به نمايش و ويرايش اطلاعات منابع داده ای است مثل کنترل های FormView و يا GridView استفاده کرد . به عبارت ديگر اين کنترل همانند يک پل يا رابط بين منبع داده و کنترل وب نمايش دهنده اطلاعات عمل کرده و اطلاعات درخواست شده را از منبع داده دريافت کرده و به کنترل وب منتقل می سازد . همچنين در صورت نياز اطلاعات اصلاحی و ويرايش شده را از کنترل وب به منبع داده ای ارسال می کند . همچنين کنترل SqlDataSource به کنترل های وب که با آن استفاده می شوند ، امکانات و قابلیت های بسياری همچون صفحه بندی( Paging ) ، مرتب سازی اطلاعلات ( Sorting ) ، فيلترينگ داده ( Filtering ) و ... را اضافه می کند . در واقع کنترل های سرور داده مثل SqlDataSource اين وظايف را برای کنترل های وب انجام می دهند . در واقع اتباط بين يک کنترل SqlDataSource و يک کنترل وب مثل GridView به صورا زير است : منبع داده ای کنترل داده SqlDataSource کنترل وب [HR][/HR] نحوه کار کنترل SqlDataSource : کنترل SqlDataSource ، از کلاس های مختلف ADO.NET برای ارتباط با منابع داده ای که در اين زبان پشتيبانی می شوند ، استفاده می کند . کلاس های استفاده شده برای اين منظور در ليست زير آمده اند . نام اين کلاس را در زمان تنظيم کنترل SqlDataSource برای کار با هر يک از پايگاه های داده مربوط بايد در قسمت ProvideName خاصيت ConectionString کنترل ، چنانچه که بعده توضيح می دهيم ، قرار داد . System.Data.SqlClient : برای ارتباط با پايگاه داده SQL Server System.Data.oleDb : برای ارتباط با منبع داده ای OLE DB System.Data.odbc : برای ارتباط با منبع داده ای ODBC System.Data.OracleClient : برای ارتباط با پايگاه داده Oracle استفاده از کنترل SqlDataSource، به شما امکان می دهد تا با ترکيب اين کنترل وب به سادگی و بدون استفاده مستقيم از کلاس های ADO.NET ، داده های مورد نظر خود را بر روی صفحات وب ASP.NET نمايش داده و ويرايش کنيد . برای اتصال يک کنترل SqlDataSource به پايگاه داده ، شما بايستی موارد زير را تنظيم کنيد : ConnectionString : رشته ارتباطی يا ConnectionString توسط خاصيت ConnectionString کنترل تعيين شده و در واقع شامل اطلاعات لازم برای اتصال کنترل به پايگاه داده است . اين اطلاعات شامل نام و مکان سرور پايگاه داده ، نام جدول بانک اطلاعاتی مورد نظر و در صورت نياز اطلاعات امنيتی مثل کلمه عبور و رمز جهت اتصال به پايگاه داده است . نحوه تنظيم اين خاصيت را در بخش بعدی شرح می دهيم . SelectCommand : دستور انتخاب توسط خاصيت ُSelectCommand کنترل تعيين شده و شامل يک دستور SQL از نوع Select است و اطلاعاتی را که بايد از از جدول بانک اطلاعاتی استخراج شود را تعيين می کند . همچنين مقدار اين خاصيت می تواند نام يک تابع آماده SQL يا ( ُ Stored Procedure ) نيز باشد ، که در آن دستورات لازم برای انتخاب اطلاعات مورد نظر تعريف شده است و می تواند برای فراخوانی داده مورد استفاده قرار بگيرد . نحوه تنظيم اين خاصيت را در بخش بعدی به طور مفصل شرح می دهيم . Provider : تامين کننده يا Provider : که توسط قسمت Provider در خاصيت Connectionstring کنترل تنظيم می شود ، تعيين کننده کلاس ADO.NET ای است که کنترل برای اتصال به پايگاه داده از آن استفاده می کند . در زمان اجرا ، کنترل SqlDataSource با توجه به رشته ارتباطی تعيين شده ( ConnectionString ) برای آن ارتباط با پايگاه داده مورد نظر را باز کرده ، دستورات SQL خاصيت SelectCommand را اجرا می کند و اطلاعات لازم را از پايگاه داده به کنترل يا کنترل های وب متصل به خود منتقل می سازد . همچنين در صورتی که اطلاعات اصلاحی يا ويرايش شده نيز وجود داشته باشد آن را از کنترل وب به پايگاه داده و در نهايت ارتباط را می بندد . [HR][/HR]
پاسخ : آموزش ASP.NET [h=2]مقدمه و معرفی کنترل SqlDataSource[/h] معرفی کنترل SqlDataSource : کنترل SqlDataSource يکی از کنترل های سرور داده پرکاربرد در ASP.NET است ، که به شما امکان اتصال به انواع مختلفی از منابع داده ای همچون پايگاه داده SQL Server ، Access ، Oracle و يا منابع داده ای OLE DB يا ODBC را می دهد . کنترل SqlDataSource ، همانند ساير کنترل های سرور داده خود قادر به نمايش و يا ويرايش اطلاعات منابع داده ای نيست و برای اين منظور بايستی اين کنترل را به همراه يک کنترل وب ديگر که قادر به نمايش و ويرايش اطلاعات منابع داده ای است مثل کنترل های FormView و يا GridView استفاده کرد . به عبارت ديگر اين کنترل همانند يک پل يا رابط بين منبع داده و کنترل وب نمايش دهنده اطلاعات عمل کرده و اطلاعات درخواست شده را از منبع داده دريافت کرده و به کنترل وب منتقل می سازد . همچنين در صورت نياز اطلاعات اصلاحی و ويرايش شده را از کنترل وب به منبع داده ای ارسال می کند . همچنين کنترل SqlDataSource به کنترل های وب که با آن استفاده می شوند ، امکانات و قابلیت های بسياری همچون صفحه بندی( Paging ) ، مرتب سازی اطلاعلات ( Sorting ) ، فيلترينگ داده ( Filtering ) و ... را اضافه می کند . در واقع کنترل های سرور داده مثل SqlDataSource اين وظايف را برای کنترل های وب انجام می دهند . در واقع اتباط بين يک کنترل SqlDataSource و يک کنترل وب مثل GridView به صورا زير است : منبع داده ای کنترل داده SqlDataSource کنترل وب [HR][/HR] نحوه کار کنترل SqlDataSource : کنترل SqlDataSource ، از کلاس های مختلف ADO.NET برای ارتباط با منابع داده ای که در اين زبان پشتيبانی می شوند ، استفاده می کند . کلاس های استفاده شده برای اين منظور در ليست زير آمده اند . نام اين کلاس را در زمان تنظيم کنترل SqlDataSource برای کار با هر يک از پايگاه های داده مربوط بايد در قسمت ProvideName خاصيت ConectionString کنترل ، چنانچه که بعده توضيح می دهيم ، قرار داد . System.Data.SqlClient : برای ارتباط با پايگاه داده SQL Server System.Data.oleDb : برای ارتباط با منبع داده ای OLE DB System.Data.odbc : برای ارتباط با منبع داده ای ODBC System.Data.OracleClient : برای ارتباط با پايگاه داده Oracle استفاده از کنترل SqlDataSource، به شما امکان می دهد تا با ترکيب اين کنترل وب به سادگی و بدون استفاده مستقيم از کلاس های ADO.NET ، داده های مورد نظر خود را بر روی صفحات وب ASP.NET نمايش داده و ويرايش کنيد . برای اتصال يک کنترل SqlDataSource به پايگاه داده ، شما بايستی موارد زير را تنظيم کنيد : ConnectionString : رشته ارتباطی يا ConnectionString توسط خاصيت ConnectionString کنترل تعيين شده و در واقع شامل اطلاعات لازم برای اتصال کنترل به پايگاه داده است . اين اطلاعات شامل نام و مکان سرور پايگاه داده ، نام جدول بانک اطلاعاتی مورد نظر و در صورت نياز اطلاعات امنيتی مثل کلمه عبور و رمز جهت اتصال به پايگاه داده است . نحوه تنظيم اين خاصيت را در بخش بعدی شرح می دهيم . SelectCommand : دستور انتخاب توسط خاصيت ُSelectCommand کنترل تعيين شده و شامل يک دستور SQL از نوع Select است و اطلاعاتی را که بايد از از جدول بانک اطلاعاتی استخراج شود را تعيين می کند . همچنين مقدار اين خاصيت می تواند نام يک تابع آماده SQL يا ( ُ Stored Procedure ) نيز باشد ، که در آن دستورات لازم برای انتخاب اطلاعات مورد نظر تعريف شده است و می تواند برای فراخوانی داده مورد استفاده قرار بگيرد . نحوه تنظيم اين خاصيت را در بخش بعدی به طور مفصل شرح می دهيم . Provider : تامين کننده يا Provider : که توسط قسمت Provider در خاصيت Connectionstring کنترل تنظيم می شود ، تعيين کننده کلاس ADO.NET ای است که کنترل برای اتصال به پايگاه داده از آن استفاده می کند . در زمان اجرا ، کنترل SqlDataSource با توجه به رشته ارتباطی تعيين شده ( ConnectionString ) برای آن ارتباط با پايگاه داده مورد نظر را باز کرده ، دستورات SQL خاصيت SelectCommand را اجرا می کند و اطلاعات لازم را از پايگاه داده به کنترل يا کنترل های وب متصل به خود منتقل می سازد . همچنين در صورتی که اطلاعات اصلاحی يا ويرايش شده نيز وجود داشته باشد آن را از کنترل وب به پايگاه داده و در نهايت ارتباط را می بندد .
پاسخ : آموزش ASP.NET [h=2]اتصال کنترل SqlDataSource به منبع داده[/h] مقدمه : هما نطور که در بخش قبل گفتيم ، کنترل SqlDataSource برای اتصال به انواع مختلفی از منابع داده ای به کار می رود .برای ايجاد ارتباط بايد يک ConnectionString مناسب و يک دستور Select را در خاصيت SelectCommand کنترل تعيين کنيد . سپس می توانيد اين کنترل را به همراه يک يا چند کنترل وب ديگر که از خاصيت DataSourceID پشتيبانی می کنند ، برای نمايش و ويرايش اطلاعات استفاده کنيد . [HR][/HR] نحوه ايجاد يک ConnectionString برای يک کنترل SqlDataSource : برای ايجاد يک ConnectionString مناسب می توان از 2 روش مختلف زير استفاده کرد : استفاده از محيط کدنویسی : در اين حالت کاربر به صورت مستقيم کدهای لازم را در قسمت های مربوط تايپ می کند . لازمه اين روش آشنایی کامل به نحوه کدنويسی ConnectionString و انواع خواص مربوط به آن است . استفاده از محيط طراحی ( Design ) نرم افزار Microsoft Visual Studio 2005 : در اين حالت ، کاربر از محيط طراحی نرم افزار استفاده کرده و با بهره گيری از منوها و امکانات Visual موجود ، اقدام به ايجاد ConnectionString کرده و ديگر نياز به کد نويسی مستقيم ندارد . همزمان با انجام عمليات در محيط طراحی ، برنامه به طور خودکار کدهاب متنی لازم را توليد کرده و در جاهای مناسب قرار می دهد . در ادامه به معرفی هر 2 روش می پردازيم . 1 ) روش استفاده از محيط کدنويسی : فايل * web.config را از منوی Solution Explorer در فهرست اصلی وب سايت خود باز کنيد . در صورتی که اين فايل وجود ندارد ، يک نمونه از آن ايجاد کنيد . فايل web.config : فايل web.config ، يک فايل سیستمی است که هر سايت ASP.Net ، يک نمونه از آن را بايستی داشته باشد . اگر سايت خود را با استفاده از نرم افزار Visual Studio ايجاد کنيد ، اين برنامه به طور خودکار يک نمونه از فايل را برای سايت شما ايجاد می کند . اين فايل شامل اطلاعات مهم و کلی مربوط به نتظيمات مختلف سايت برای قرار گرفتن بر روی وب است . در تگ < Configuration > ، تگ < ConnectionString > را باز کنيد . چنانچه اطن تگ نيز وجود ندارد ، يک نمونه از آن را ايجاد کنيد . در درون تگ < ConnectionString > يک تگ جديد < add > را ايجاد کرده و در درون بدنه تگ ( نه بين تگ باز و بسته آن) موارد زير را تعيين کنيد : Name : به وسيله اين خاصيت يک نام منحصر به فرد را برای ConnecitonString خود انتخاب کنيد . از اين نام می توانيد برای دسترسی و اشاره به ConnectionString از هر کجای برنامه استفاده کنيد . برای نمونه در مثال زير نام SampleConnection را برای ConnectionString خود انتخاب کرده ايم . [TABLE="class: ex"] [TR] [TD="class: body"] Name = " SampleConnection " [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] ConnectionString : اين خاصيت در واقع همان رشته ارتباطی است و شامل اطلاعات کليدی درباره ارتباط است . در اين خاصيت بايد نام سرور پايگاه داده ( Data Source ) ، نام پايگاه داده مورد نظر بر روی سرور ( Initial Catalog ) و تنظيمات امنيتی (Integrated Secutrity ) برای ايجاد ارتباط را تنظيم کرد . برای مثال به کد زير دقت کنيد . در کد زير به پايگاه داده UniverCity بر روی سرور Developer-PC متصل شده ايم . در اين حالت از امکان شناسایی windows برای ارتباط استقاده کرده ايم . بنابراين مقدار خاصيت Integrated Secrity آن بر روی True تنطيم شده است . نکته مهم : نام سرور بايد نام کامپيوتری باشد که پايگاه داده بر روی آن قرار دارد . چنانچه پايگاه داده بر روی کامپيوتر خودتان قرار دارد ، نام آن را به عنوان مقدار Data Source قرار دهيد و به جاي آن هم می تونيد کاراکتر . ( نقطه ) را قرار دهيد . [TABLE="class: ex"] [TR] [TD="class: body"] ConnectionString = " Data Source = Developer-PC ; Integrated Security = True ; Initial Catalog = UniverCity " [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] ProvideName : اين خاصيت کلاس ADO.NET مورد استفاده را برای ايجاد ارتباط کنترل نعيين می کند . برای مثال ، مقدار اين خاصيت برای اتصال به پايگاه داده SQL Server بايد روی مقدار System.Data.SqlClient تنظيم شود . به مثال زير دقت کنيد : [TABLE="class: ex"] [TR] [TD="class: body"] ProvideName = " System.Data.SqlClient " [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] در نهايت باي قسمت < ConnectionStrign > فايل web.config شما به صورت زير باشد . در تيجه فايل web.config را برای اعماا تغييرات ايجاد شده ، ذخيره کنيد . [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] <connectionstrings> < add name="SampleConnection" connectionString="Data Source= Developer-PC ;Initial Catalog=UniverCity;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionstrings> [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] اکنون شما دارای يک ConnectonString مناسب برای ايجاد ارتباط يک کنترل SqlDataSource به يک پايگاه داده SQL Server را ايجاد کرده ايد . با استفاده از نام اين ConnectionString می توانيد آن را با يک يا چندين کنترل SqlDataSource برای ايجاد ارتباط با پايگاه داده تعيين شده استفاده کنيد . نحوه استفاده از اين ConnectioString برای ايجاد ارتباط به صورت زير است : يک کنترل SqlDataSourec را بر روی صفحه ASP.NET مورد نظر خود قرار دهيد . اين کنترل در منوی Toolbox و در قسمت Data قرار دارد . در درون بدنه تگ کنترل SqlDataSource موارد زير را تعيين کنيد : SelectCommand : اين خاصيت تعيين کننده دستور SQL مورد نظر از نوع Select است ، که برای فراخوانی اطلاعات مورد نظر شما از جدول مربوطه در پايگاه داده مورد استفاده قرار می گيرد . نحوه تنظيم و استفاده از اين خاصيت را در بخش بعدی به طور کامل تشريح می کنيم . برای نمونه در مثال زير يک دستور Select را برای دريافت اطلاعات تعيين کرده ايم : [TABLE="class: ex"] [TR] [TD="class: body"] SelectCommand = " Select Name From Student " [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] ConnectionString : مقدار اين خاصيت را با نام ConnectionString مورد نظر خود که قبلا آن را در فايل web.config ايجاد کرده ايد ، مقدار دهی کنيد . برای نمونه در مثال زير مقدار آن را با نام ConnectionSting ی که در بالا ايجاد کرده بوديم ، مقدار دهی می کنيم . توجه کنيد که از فرمت زير برای مقدار دهی خاصيت ConnectionString استفاده کنيد : [TABLE="class: ex"] [TR] [TD="class: body"] ConnectionString = " < %$ ConnectionStrings:SampleConnection % > " [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] در نهايت کد کنترل SqlDataSource شما بايد به صورت زير باشد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] < asp:SqlDataSource runat="server" ID="SqlControl1" ConnectionString = " < %$ ConnectionStrings:SampleConnection % > " SelectCommand="Select Name from Students " > < /asp:SqlDataSource > [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] اکنون کنترل SqlDataSource شما با استفاده از ConnectionString مورد نظر شما به پايگاه داده متصل شده است و امکان اين وجود دارد که با ترکيب آن با هر کنترل وب ديگر به نمايش و ويرايش اطلاعات منبع داده ای بپردازيد . نکته مهم : نکته مهمل که در اين قسمت بايد به آن اشاره کنيم ، اين است که شما می توانيد ConnectionString مورد نظر خود را به جای تعيين در فايل web.config و سپس اشاره به آن ، مستقيما آن را در درون تگ کنترل SqlDataSourec خود در صفحه ASP.NET آن را ايجاد کنيد . مزيت تعيين آن در فايل web.config عبارتست از : با تعيين يک CoonectionString در فايل web.config ، شما می توانيد از نام آن برای چندين کنترل SqlDataSource به صورت همزمان و مشترک استفاده کنيد . به عبارت ديگر در اين روش می توانيد با يکبار کدنويسی ، آن را چندين بار مورد استفاده قرار دهيد . چنانچه در آينده بخواهيد يک ConnectionString واحد را در برنامه تغيير دهيد ، چنانچه آن را در فايل web.config تعيين کرده باشيد ، فقط با يکبار تغيير آن ، ConnectionString تمام کنترل ها به صورت همزمان تغيير می کند . اما چنانچه آن را در صفحات تعيين کرده باشيد ، بايد هر يک را به صورت مجزا تغيير دهيد ، که کار بسيار زمان گير بوده و با احتمال همراه است . در حالت تعيين ConnectionString در فايل web.config ، امنيت و کارایی برنامه افزايش یافته و حجم کدنویسی نيز کاهش می یابد . جنانچه بخواهيد CoonectionString را در درون تگ کنترل SqlDataSource خود ايجاد کنيد ، کد آن به صورت زير در خواهد آمد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] Example [/TD] [/TR] [TR] [TD="class: body"] < asp:SqlDataSource runat="server" ID="SqlControl1" ConnectionString = " data source = Developer-PC ; initial catalog = UniverCity ; Integrated Security = True " ProviderName="System.Data.SqlClient" SelectCommand="Select Name from Students " > < /asp:SqlDataSource > [/TD] [TD="class: header"] کد [/TD] [/TR] [/TABLE] [HR][/HR] استفاده از محيط طراحی ( Design ) در برنامه Visual Studio 2005 : برای اطن منظور مراحل زير را به ترتيب انجام دهيد : صفحه ASP.NET مورد نظر خود را در برنامه Visual Studio باز کرده به نمای طراحی ( Design ) برويد . از منوی Toolbox و قسمت Data ، يک کنترل جديد SqlDataSource را بر روی صفحه قرار دهيد . کنترل را از روی صفحه انتخاب کرده ، بر روی آن کليک سمت راست نموده و از منوی ظاهر شده گزينه Show Smart Tag را انتخاب کنيد . همچنين جهت نمايش اين منو می توانيد علامت فلش کوچکی که در گوشه بالای کنترل در هنگام انتخاب آن ظاهر می شود را نيز کليک کنيد . از منوی باز شده گزينه Configure Data Source را انتخاب کنيد تا پنجره ای به همين نام باز شود . از پنجره باز شده ، از قسمت Which data conneciton should your application use to connect to the database ? می توانيد نام يک ConnectionString از قبل ايجاد شده را به عنوان ConnectionString کنترل مورد نظر خود انتخاب کنيد . اما اگر می خواهيد يک ConnectionString جديد را برای آن بسازيد ، بر روی گزينه New Connection کليک کنيد . پنجره جديدی به نام Add Connection باز می شود . از قسمت Data Source نوع کلاس ADO.NET مورد نظر خود را انتخاب کنيد که حالت پيش فرض آن برای کنترل SqlDataSource ، مقدار Microsoft SQL Srver ( SqlClient ) است . در قسمت Server Name نام سرور پايگاه داده خود را انتخاب کنيد . چنانچه پايگاه داده مورد نظرتان بر روی کامپيوتر خودتان قرار دارد ، می توانيد به جای آن کاراکتر . ( نقطه ) و يا نام کامپيوترتان را وارد کنيد . چنانچه پايگاه داده بر روی يک کامپيوتر بر روی يک شبکه قرار دارد ، بايد نام آن کامپیوتر بر روی شبکه را وارد کنيد . در قسمت Log on to the server می توانيد شرايط امنيتی اتصال به پايگاه داده را تعيين کنيد . اين قسمت دارای 2 حالت زير است : Use Windows Authentincation : در اين حالت برنامه به User Name و Password خاصی وابسته نيست و از Log On ويندوز برای اتصال به پايگاه داده استفاده می کند . Use SQL Server Authentication : در اين حالت شما می توانيد يک Username و Password را برای اتصال به پايگاه داده مورد نظر تعيين کنید ، که در اين صورت کاربر برای اتصال به آن پايگاه داده در زمان اجرای برنامه بايد Username , Password تعيين شده را وارد کند . سپس در قسمت Connect to a database و در کادر Select or enter a database name می توانيد نام پايگاه داده ای را که می خواهيد به آن متصل شويد را از کادر کشویی آن انتخاب کرده و يا نام آن را به صورت دستی وارد کنيد . پس از انجام مراحل فوق ، کار اتصال به پايگاه داده مورد نظرتان به اتمام رسیده است . می توانيد برای امتحان ارتباط ايجاد شده بر روی گزينه Test Connection کليک کنيد که در صورت مشاهده پيغام The Connection Succeed ، به اين معناست که ارتباط به درستی برقرار شده است . در نهايت بر روی گزينه Ok کليک کرده و می توانيد از امکانات کنترل خود استفاده کنيد .