PracticU

שימוש ב-Stored Procedures

בלי כתוביותעם כתוביות
PracticU › קורס MVC › שימוש ב-Stored Procedures
מילון מושגים:
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.
Entity Framework - ספריית מיקרוסופט שממפה בין אובייקטים בקוד לבין טבלאות במסד נתונים, ומאפשרת לעבוד עם הנתונים בלי לכתוב SQL ישיר.
פריימוורק - מסגרת תוכנה שמספקת מבנה וכלים מוכנים לפיתוח יישומים, כדי לחסוך כתיבת קוד חוזר.
MVC - דפוס ארכיטקטורה שמפריד יישום לשלושה חלקים: מודל (נתונים), תצוגה (View) ובקר (Controller).
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.
מתודה - פונקציה המוגדרת בתוך מחלקה ומתארת פעולה שאובייקטים מאותה מחלקה יכולים לבצע.
DELETE - פקודת SQL למחיקת שורות מטבלה. גם שיטת HTTP לבקשת מחיקה של משאב בשרת.

שימוש ב-Stored Procedures
בשיעור רואים איך משתמשים ב-Stored Procedures של SQL Server מתוך Entity Framework בפרויקט MVC, כולל בנייה של הפרוצדורות בבסיס Northwind.
למה Stored Procedures
הפרוצדורות מהירות יותר משאילתות SQL שנשלחות מ-Entity Framework. ה-DBA יכול לחסום גישה ישירה לטבלה ולאפשר גישה רק דרך הפרוצדורה. קוד שנכתב פעם אחת בבסיס הנתונים יכול לשמש מערכות שונות.
בניית הפרוצדורות
1. GetAllProducts: פרוצדורה ללא פרמטרים, שמחזירה את כל המוצרים מטבלת Products.
2. GetOneProduct: מקבלת @ProductID מסוג int ומחזירה מוצר אחד.
3. AddProduct: מקבלת שם מוצר מסוג nvarchar בגודל 40 ומחיר מסוג money, ומוסיפה שורה חדשה.
4. UpdateProduct: מקבלת גם את המזהה ומעדכנת את השם והמחיר. ה-WHERE על מזהה המוצר קריטי, כי בלעדיו העדכון היה נוגע בכל הרשומות.
5. DeleteProduct: מקבלת מזהה ומוחקת את המוצר.
הרצה והגדרה
מתחילים ב-USE Northwind, ולכל פרוצדורה כותבים GO אחרי הפקודה. אחרי ההרצה הפרוצדורות מופיעות בתיקיית Programmability.
חיבור ל-Entity Framework
1. מודל מחדש: מוחקים את קובץ ה-EDMX ואת מחרוזת החיבור, ומוסיפים ADO Entity Data Model מהמסד, כולל הטבלאות והפרוצדורות.
2. Model Browser: מציג את הטבלאות והפרוצדורות במסד, ואת המחלקות שנוצרו לפיהן.
3. Map Entity to Functions: מחברים את פעולות ה-Insert וה-Update לפרוצדורות, ולכל פרמטר מציינים איזו תכונה של המחלקה שולחת אליו ערך.
4. מזהה מקורי: בשדה ProductID מסמנים שהערך המקורי נשמר, כך שגם אם הפרוצדורה תשתנה בעתיד, המזהה לא יידרס.
5. מחיקה ישירה: את המחיקה לא מחברים במיפוי. קוראים לפרוצדורה ישירות מהקונטרולר, באמצעות המתודה DeleteProduct עם המזהה, ואין צורך ב-save changes.
הערות
הפעולות דרך הפרוצדורות נבדקו באתר: הוספה, עדכון ומחיקה של מוצר עבדו דרך Stored Procedures.
כעת אפשר לבצע insert, update ו-delete בעזרת Stored Procedures מתוך פרויקט MVC, בלי לכתוב שאילתות SQL בקוד.
השיעור הבא בקורס: שימוש במודל השכבות - N-Tiers
מילון מושגים:
קוד מקור - הקוד שמפתחים כותבים בשפת תכנות, לפני הידור, המגדיר את פעולת התוכנה.
MVC - דפוס ארכיטקטורה שמפריד יישום לשלושה חלקים: מודל (נתונים), תצוגה (View) ובקר (Controller).

להורדת קוד מקור של כל הדוגמאות בקורס MVC – לחץ כאן


פרקי ההרצאה: שימוש ב-Stored Procedures

  1. 00:00

    היתרונות של Stored Procedures

  2. 01:28

    יצירת GetAllProducts

  3. 02:31

    פרוצדורה לשליפת מוצר אחד

  4. 03:08

    פרוצדורה AddProduct

  5. 04:31

    פרוצדורה UpdateProduct

  6. 05:47

    פרוצדורה DeleteProduct

  7. 07:39

    ייבוא הפרוצדורות ל-Entity Framework

  8. 09:01

    Model Browser וה-Mapping

תמלול ההרצאה: שימוש ב-Stored Procedures

הטקסט המלא של הדקות הראשונות בהרצאה «שימוש ב-Stored Procedures» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:00

    הדבר הבא שאנחנו הולכים לראות זה כיצד לקרוא מתוך אנטיטי פריימוורק לסטורד פרוסיג'רס שנמצאים בדאטאבייס ולשלב את המידע שמוחזר בפרויקט MVC. למה חשוב לנו לדעת את זה? מפני שסטורד פרוסיג'רס הם הרבה יותר מהירים מאשר פקודות sql שאנטיטי פריימוורק יכולה לשלוח לדאטאבייס.

  2. 00:22

    כמו כן יש לסטורד פרוסיג'רס אפשרות להגדיר סקיוריטי, כלומר אם ה-DBA אדמיניסטרטור, כלומר מי שאחראי על הדאטאבייס לא רוצה שכל העולם יוכל לגעת באיזושהי טבלה, בוא נניח טבלה לכרטיסי אשראי, אז הוא יכול לבצע חסימה לטבלה הזאת מבחינת סקיוריטי ולבנות סטור פרוסיג'ר

  3. 00:43

    שרק הסטור פרוסיג'ר ניגשת לטבלה וכולם יכולים לגשת לסטור פרוסיג'ר דרכה לבצע פעולות על הטבלה אבל לגשת לטבלה ישירות לא יהיה להם הרשאה.

  4. 00:53

    על מבחינת סקיוריטי גם אנחנו יכולים להרוויח כאן. דבר נוסף, קוד שקיים ב-Stored Procedures קיים פעם אחת בדאטאבייס ואז כל מיני מערכות שונות לדוגמה אתר אינטרנט או איזשהו סרוויס או אתרים אחרים או תוכנות יכולות לגשת ל-Stored Procedures אם יש להם כמובן גישה לדאטאבייס בעזרת היוזרנלם

  5. 01:12

    והפסוורד ולהשתמש ב-Stored Procedures שכתבנו פעם אחת וככה אנחנו לא צריכים בכל מערכת לכתוב מחדש את פקודות ה-SQL או השאילתות בשביל לבצע את הפעולות.

  6. 01:24

    אז אנחנו הולכים לראות שני דברים, דבר ראשון איך לבנות את ה-Stored Procedures האלה ודבר שני איך לקרוא להם מתוך Entity Framework. אז בואו נתחיל עם הבנייה שלהם.

  7. 01:33

    אז אנחנו רוצים בעצם לגשת למסד הנתונים ולהסתכל על Northwind ולהוסיף שאילתא חדשה שבעזרתה אנחנו נבנה כרגע מספר Stored Procedures שיאפשרו להפעיל את האתר שבנינו.

  8. 01:49

    אז דבר ראשון אנחנו נגדיר שאנחנו רוצים לעבוד עם Northwind. זה יהיה בעזרת פקודת Used Northwind. Go מתארת שאנחנו רוצים להריץ את הפקודה.

  9. 02:01

    לאחר מכן אנחנו יוצרים שאילתה שמחזירה, Store Procedure שמחזירה בעצם את כל המידע מטבלת המוצרים. זה יהיה Create Procedure, נקרא לה Get All Products.

  10. 02:20

    היא בעצם לא צריכה לקבל כלום והיא צריכה לבצע משפט Select, Select All From Products. מיד אחרי השאילתה גו בשביל להריץ אותה.

  11. 02:34

    לאחר מכן שאילתה נוספת, Create Procedure, שתקבל one product או תחזיר one product. היא כן תקבל את הקוד של המוצר בשביל להחזיר אותו.

  12. 02:48

    לצורך כך יש לנו להגדיר משתנה, משתנה בסטורט פרוציג'ר תמיד מוגדר עם שטרודל לפניו. שם המשתנה ProductID, הטיפוס שלו זה אינטג'ר.

  13. 03:00

    ונבצע פה Select All From Products Where ProductID שווה למשתנה ProductID שהתקבל לסטורט פרוציג'ר. שוב גו בשביל להוריץ אותה.

  14. 03:22

    לאחר מכן Create Procedure Add Product היא תקבל את כל המשתנים בשביל להוסיף מוצר אחד חוץ מהפרודקט ID. Product name זה nvar char בגודל 40, ככה זה מוגדר בדאטאבייס.

  15. 03:45

    לאחר מכן היא תקבל את unit price מטיפוס money וכל משתנה אחר שנרצה להוסיף, כמובן היא צריכה לקבל את כל השדות שיש בטבלה. הקוד של ה-stored procedure הזאתי יהיה insert into products לתוך product name ו-unit price את כל ה-values product name ו-unit price ויש לנו פונקציית insert.

  16. 04:22

    בואו נשמור את הקוד בינתיים שלא יאבד לנו, נלך לקונן C תיקייה של השיעור הזה ונקרא לזה stored procedures. אוקיי, לאחר מכן יש לנו את create procedure update product זאת תקבל את כל מה שה-store procedure הקודמת קיבלה אבל בנוסף היא צריכה לקבל גם את ה-product ID בכדי לדעת בדיוק מה לעדכן.

  17. 05:05

    כאן השאילתה תהיה update product set product name שווה ל-product name שהתקבל unit price שווה ל-unit price שהתקבל ואנחנו רוצים להגיד איפה אנחנו רוצים לעשות את זה. Product ID שווה ל-Product ID שהתקבל ואנחנו לא נגיד היכן, באיזה רשומה בדיוק לבצע את זה, זה יתבצע על כל הרשומות ויהרוס לנו את שאר המידע בטבלה.

  18. 05:45

    הדבר הבא שאנחנו רוצים זה ליצור Store Procedure עבור Delete. כל מה שאנחנו צריכים לקבל זה Product ID ולבצע מחיקה של המוצר הזה.

  19. 06:05

    Delete From Products where Product ID שווה ל-Product ID שהתקבל לפונקציה. פה אנחנו צריכים go, פה אנחנו צריכים go. אז בנינו את כל ה-stored procedures ומה שנשאר לנו לעשות זה רק להריץ אותם בכדי להגדיר אותם בדאטאבייס.

  20. 06:31

    זה יהיה פקודת execute. בואו נריץ, הוא כותב לנו פה commands completed successfully ובואו נסתכל עליהם בתוך הדאטאבייס. יש לנו כאן תיקייה שנקראת programmability, יש לנו פה stored procedures ובואו נסתכל על כל ה-stored procedures שהתווספו.

  21. 06:50

    הנה add product, הנה delete product, גט אול פרודקטס, גט וואן פרודקט ואפדייט פרודקט בדיוק הסטורט פרוסידג'ר שהוספנו אם בהמשך אנחנו נרצה ללכת ולעדכן אותם אנחנו יכולים פשוט ללחוץ על סטורט פרוסידג'ר מודיפיי ואז להיכנס לקוד שלה ולשנות מה שאנחנו רוצים וזאת תהיה פקודת אלטר פרוסידג'ר כרגע אנחנו לא

  22. 07:16

    צריכים לשנות כלום יצרנו את הסטורט פרוסידג'ר ומה שנשאר לנו זה רק ללכת ולהתחבר למסד הנתונים לסטורט פרוסיג'רס האלה ומתוך כל פקודות ה-insert, update, delete ו-select לבחור את הסטורט פרוסיג'רס בשביל לבצע את הפעולה.

  23. 07:36

    כעת אחרי שבנינו את הסטורט פרוסיג'רס בואו נראה איך אנחנו יכולים להשתמש איתם מתוך אנטיטי פריימורק. אז אנחנו הולכים לראות בעצם שתי שיטות לקרוא לסטורט פרוסיג'רס מתוך אנטיטי פריימורק.

  24. 07:50

    דבר ראשון בואו נביא את הסטורט פרוסיג'רס. לצורך כך אני אמחוק את הקובץ EDMX כי אני רוצה להעביר אותו מההתחלה ולהראות את כל התהליך מההתחלה עם הבאת Store Procedures.

  25. 08:03

    יש לנו ב-Web Config את ה-Connection String, אנחנו גם אותה נמחוק, נבצע שמירה, נלך בחזרה למודל ונביא עוד פעם מ-Data את ADO Entity Data Model.

  26. 08:22

    נקרא לו Northwind, Generate From Database, נתחבר לשרת, נבחר את Northwind, נבדוק שה-Connection יתבצע כמו שצריך ויש לנו פה התחברות מחדש ל-Entity של Northwind.

  27. 08:47

    נבצע Next, הפעם אנחנו נבחר גם את הטבלאות וגם את ה-Stored Procedures. נבצע Finish, יש לנו פה את כל האישויות שנוצרות לנו בהתאם לטבלאות מהדאטאבייס ואנחנו יכולים עכשיו גם לראות דבר נוסף אם אנחנו לוחצים פה מקש ימני אנחנו יכולים לבחור במודל בראוזר.

  28. 09:19

    מודל בראוזר מראה לנו כמה דברים. דבר ראשון הוא מראה לנו מה קיים בתוך הדאטאבייס. אז זה נמצא כאן בנורת'ווינד מודל נקודה סטור.

  29. 09:30

    כאן אנחנו רואים את הטבלאות שקיימות בדאטאבייס ואנחנו רואים לדוגמה את ה-Stored Procedures שקיימים בדאטאבייס. הנה לדוגמה Add Product.

  30. 09:41

    הדבר השני שהמודל בראוזר מראה לנו זה מה יהיו המאפינג, כלומר לאן כל דבר מקושר. אנחנו יכולים לראות את זה כאן בנורטווינד מודל. פה לדוגמה אנחנו רואים את המחלקות השונות שנוצרו לנו בהתאם לטבלאות.

  31. 09:57

    הנה לדוגמה המחלקה פרודקט. כאן אנחנו רואים את הפונקציות שהמאפינג ביצע, כלומר מכל פונקציה שהייתה בדאטאבייס והבאנו, המערכת יצרה פונקציה בתוך המודל של אנטיטי פריימורק.

  32. 10:14

    אם אנחנו קוראים לפונקציה של המודל של entity framework היא ממופה לתוך פונקציה אמיתית שיושבת בדאטאבייס. אם אנחנו לוחצים פה לדוגמת double-click על add product אנחנו מיד מנותבים ל-add product שנמצאת כאן.

  33. 10:28

    עכשיו אנחנו יכולים פשוט לבחור את האובייקט שאנחנו רוצים לטפל בו לדוגמה product, מחלקה product, ואנחנו יכולים ללכת ולהציג את mapping details עבור product.

  34. 10:44

    כאן בעצם אנחנו רואים את הטבלה של פרודקט ואנחנו רואים שהיא ממופה לאובייקט פרודקט שיש לו פרודקט איי-די ופרודקט ניים וכולי. אנחנו רואים שהעמודה פרודקט איי-די שנמצאת בטבלה ממופה לפרודקט איי-די באובייקט פרודקט.

  35. 11:06

    עמודה פרודקט ניים nvarchar בטבלה ממופה לפרודקט ניים שזה סטרינג בתוך האובייקט פרודקט. רוצים לעשות את אותו הדבר עבור פונקציות שזה האייקון הזה.

לקורס המלא: קורס MVC אונליין בעברית

ההרצאה הקודמת: שימוש ב-Data Annotations

ההרצאה הבאה: שימוש במודל השכבות - N-Tiers

הרצאות קשורות מקורסים אחרים

  • יצירה של Stored Procedures ב-SQL
  • מודל שכבות - Stored Procedures
  • שימוש ב-Stored Procedure - על-ידי DTO
  • שימוש ב-useEffect - חלק 1

קורסים נוספים במסלול

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס ASP.NET
  • קורס Git ו-GitHub עם Visual Studio