بخشی از پاورپوینت
--- پاورپوینت شامل تصاویر میباشد ----
اسلاید 1 :
re یا Sp یا به زبان فارسی " رویه های ذخیره شده " اشیایی اجرا پذیر در بانک اطلاعاتی SQL Server هستند که شامل یک یا چندین دستور SQL می شود ، این رویه ها میتوانند پارامتر های ورودی و خروجی داشته باشند .همچنین میتوان داخل این رویه ها به زبان SQL برنامه نویسی کرد .مهم ترین کاربر این رویه ها ذخیره کردن دستورات Select , Insert , Update , Delete هست یا ترکیبی از اینها .
اسلاید 2 :
نحوه ساخت این رویه ها به صورت زیر می باشد :
وارد بانک اطلاعاتی SQL Server شده ، پس از باز کردن بانک مورد نظر در قسمت Programmability وارد بخش Stored Procedure شوید .
بر روی Stored Procedure کلیک راست کرده و New Stored Procedure را انتخاب نمایید .
احتمالا کد های پیشفرضی را در این صفحه مشاهده می کنید ، همه این کد هارا پا کرده و به صورت زیر کد نویسی کنید :
اسلاید 3 :
به جای YourProcedureName یک نام برای برای رویه انتخاب کنید . سعی کنید نامی که انتخاب می نمایید مفهوم رویه شما را برساند مثلا برای درج یک رکورد جدید در جدول Members من نام AddNewMember را انتخاب می کنم و یا برای دریافت تمام رکورد های این جدول نام GetAllMembers نام با مفهومی است .
در پرانتز مقابل نام رویه پارامتر های رویه به همراه نوع پارامتر تعیین میشود ، اگر تعداد پارامتر ها بیشتر از یکی بود با ویرگول آنها را جدا می کنیم .
به جای SQLStatement دستورات SQl را که بین Begin و End نوشته می شوند تایپ کنید .
دستوراتی مانند Select , Insert , Update , Delete و....
اسلاید 4 :
به عنوان مثال Sp زیر اطلاعات کاربر را با دریافت پارامتر نام کاربری (@ID) از جدول TBL_Members دریافت می کند :
اسلاید 5 :
برخی از قابلیت های رویه های ذخیره شده یا Stored Procedure عبارت است از :
Precompiled بودن آنها به این معنی که به زبان ماشین بسیار نزدیک شده و به طور کامل از اول ترجمه نمیشود ، این امر باعث افزایش سرعت بارگزاری می گردد .
قابلیت ذخیره داشته و میتوان از یک رویه چندین بار در کد نویسی استفاده کرد .
دارای ویرایشگر Query می باشد (میتوانید به سادگی یک Query حرفه ای ایجاد کنید)
دارای Syntax Parser هست و از خطاهای SQL جلوگیری می کند .
دارای امنیت بالایی است و از هک شدن سایت شما توسط SQL Injection در بسیاری موارد جلوگیری می کند .
قابلیت درج چندین دستور SQL را پشت سرهم داراست .
قابلیت ارسال ورودی و خروجی دارد .
قابلیت برنامه نویسی ( شرط ، حلقه و...) به زبان TransactSQL دارد .
و.....
اسلاید 6 :
حال که با قابلیت ها ونحوه ساخت Stored Procedure آشنا شدید بد نیست که به نحوه استفاده از این ابزار جالب در Asp.NET بپردازیم .
استفاده از این ابزار بسیار ساده هست . اگر از SQL Datasource یا ObjectDatasource استفاده می کنید یک ویزارد برای ساخت و استفاده از Stored Procedure ها قرار داده شده که به راحتی آن را مدیریت کنید .
اگر از کد نویسی برای کار با بانک های اطلاعاتی استفاده می کنید کافیه بعد از تعریف SQLCommand به جای دستورات SQL نام SP را وارد نموده و بعد از آن کد زیر را اضافه نمایید :
اسلاید 7 :
این کد به برنامه می گوید که دستورات نوشته شده از نوع Stored Procedure هستند و نیازی به ترجمه آن ها نیست .
در نهایت کد های اتصال ما به شکل زیر خواهد بود :
SqlConnection Con=new SqlConnection("YourConnectionString");
SqlCommand Cmd = new SqlCommand("YourProcedureName", Con);
Cmd.CommandType = CommandType.StoredProcedure;
Con.Open();
// Some Code...
Con.Close();
اسلاید 8 :
مورد 1- در نامهاي SP از _sp استفاده نكنيد. زيرا اين علامت مخصوص sp هاي سيستمي موجود در جدول master ميباشد و هنگامي كه از اين اختصار استفاده ميكنيد سيستم ابتدا دنبال اين نام در جداول سيستمي ميگردد. پس از اون اگه پيدا نكرد با ownerDBO به دنبال اون ميگرده كه همين باعث ميشه كلي از سرعت اجراي sp كاهش پيدا كنه.
2-در داخل يك SP بهتر است به جاي اينكه داخل آن از دو دستور Select استفاده كرد، هركدام را در داخل يك SP قرار داده و آنرا به هنگام نياز اجرا كنيم. به مثال زير توجه نماييد:
كد
:create Stored procedure dbo.SPTest @query bit as if @query=0 select * from authors else select * from publishers go
بهتر است از نمونه زير استفاده شود.
كد: create Stored procedure dbo.SPTest @query bit as if @query=0 Exec sptestFromauthors else Exec spTestfrompublishers go //-----------------// create Procedure dbo.spTestfromAuthors as select * from Authors go //-----------------// Create Procedure dbo.spTestFromPublishers as Select * from Publishers go
اسلاید 9 :
دليل استفاده از كد زير چيست و نسبت به كد بالا چه مزيتي دارد؟در داخل هر sp فقط يك Query ميتواند در داخل cache SQL قرار ميگيرد . و چون در داخل SP اول دو query هستند هر دفعه كه اين SP اجرا شود مجدد SP كامپايل خواهد شد و همين سرعت آنرا خواهد گرفت
. نكته 1: در SP هايي كه نياز نيست كاربر متوجه بشه چه تعداد رديف تحت تاثير قرار گرفته است،حتماً در اول SP دستور Set NoCount On را بنويسيد. زيرا اگر اين دستور را ننويسيد هربار كه عملياتي صورت گرفته ،SQL تعداد رديفهاي تحت تاثير قرار گرفته را براي كاربر ارسال ميكند و همين باعث يك ترافيك الكي روي client , server ميشود.
نكته 2: تاجاييكه امكان داره دستورات داخل SP را كوچك نگه داريد. اين كمك ميكنه كه تعداد Lock ها كم بشه و سرعت كلي برنامه شما بالا بره. دو راه براي كاهش طول دستورات SQL موجود است.
اسلاید 10 :
تفكيك كردن كارهاي يكپارچه به مراحل كوچكتر كه هر مرحله در حد امكان به سرعت Commit شود.
سو استفاده از SQL Server Statement Batches ، كه رفت و برگشت بين client و Server را كم ميكند
نكته 3: اگر دستورات داخل SP هميشه ثابت هستند و بصورت ديناميك تعريف نشده اند، خيلي خوب است و اين كار باعث ميشود تا SQL براي آن يك Plan تشكيل دهد. ولي اگر بوسيله دستور Where داراي متغير ميباشد و هردفعه عوض ميشود اين يك چيز ايده آل نيست و هردفعه SP بايد حتماً Compile شود و Optimize نخواهد شد.اگر شما ميدانيد كه هر دفعه كه SP نياز به اجرا داشته باشد دائماً متغيرهاي آن تغيير خواهند كرد، بهتر است ابتداي SP دستور With Recompile را بنويسيد .اين SP را مجبور ميكنه كه حتماً بايد موقع اجرا دوباره Compile شود ، در اينحال شما مطمئن شويد كه هربار كه SP اجرا شد خود به خود Optimize ميشود.
نكته 4: برنامه خود را جوري طراحي كنيد كه كاربر امكان لغو يك عمليات را داشته باشد. كاري نكنيد كه شايد كاربر مجبور به reboot كردن سيستم شود ، كه ميتواند باعث تجزيه نشدن مشكلات performance شود.نكته 5: بيشتر SP ها از تعدادي پارامترها استفاده ميكنند. اين به خودي خود چيز بدي نيست. ولي زماني ميتونه باعث مشكل بشه كه اگر پارامترها optional باشند، و تعداد پارامترهاي متغير خيلي زياد باشند هر زمان كه sp اجرا ميشود. دوراه براي هندل اين مشكل هست يكي با بازده آرام و يكي با بازده سريع.راه بهتر اينه كه ، به كار گيري منطق If...ELSE را داخل SP هست، و ايجاد يك query مجزا براي هر تركيب ممكني از متغيرها كه درون SP تعريف شده اند. در اين راه، شما ميتوانيد مطمئن باشيد كه query شما هر زمان كه اجرا ميشود كارآمد و موثر هست.