PracticU

קריאה ל-Stored Procedure

בלי כתוביותעם כתוביות
PracticU › קורס ADO.NET - חיבור אתר למסד נתונים › קריאה ל-Stored Procedure
מילון מושגים:
פרוצדורה מאוחסנת - קטע קוד SQL שמור במסד הנתונים שאפשר להפעיל לפי שם, לביצוע חוזר של פעולות על הנתונים.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
ADO.NET - אוסף מחלקות ב-.NET לגישה למסדי נתונים, להרצת שאילתות ולעבודה עם התוצאות.
סוג נתונים - הגדרה של סוג הערך שמשתנה או עמודה יכולים להחזיק, למשל מספר שלם, טקסט או תאריך.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
מודל - רכיב שמייצג את הנתונים ואת הלוגיקה העסקית באפליקציה. גם ייצוג מופשט של מערכת או תהליך.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.

קריאה ל-Stored Procedure
הרצאה זו מציגה Stored Procedure: קטע קוד שנשמר בתוך מסד הנתונים, מקומפל מראש ומופעל מהאפליקציה עם פרמטרים. מוצגים יצירת פרוצדורות להוספה, עדכון, מחיקה ובחירה, וקריאה להן מ-ADO.NET.
השלבים העיקריים
1. יצירת פרוצדורה: משתמשים ב-CREATE PROCEDURE עם שם ורשימת פרמטרים שמתחילים ב-@. לכל פרמטר מציינים טיפוס נתונים, והטיפוס נבחר לפי הגדרת העמודה בטבלה.
2. הוספה ועדכון: הפרוצדורה AddProduct מבצעת INSERT, והפרוצדורה UpdateProduct מבצעת UPDATE לפי מזהה המוצר. ביצירה הפרוצדורה נשמרת בלבד ולא מופעלת.
3. מחיקה ובחירה: DeleteProduct מוחקת מוצר לפי המזהה, ו-GetProducts מחזירה את המוצרים של קטגוריה מסוימת.
4. קריאה מ-ADO.NET: יוצרים SqlCommand עם שם הפרוצדורה, מגדירים את CommandType כ-StoredProcedure, מוסיפים פרמטרים לפי השם שלהם בפרוצדורה, ומפעילים את הפקודה.
5. בחירה עם אדפטר: בפרוצדורה לבחירה משתמשים ב-SqlDataAdapter שבו הפקודה היא SelectCommand, ו-Fill ממלאה את DataTable. Fill פותחת ומסיימת את החיבור בעצמה אם הוא סגור.
פקודות והגדרות
ברירת המחדל של CommandType היא Text, שמציינת שאילתת SQL רגילה. כשקוראים לפרוצדורה חובה לשנות ל-StoredProcedure, אחרת היא לא תופעל. המרצה מדגים טיפוסים nvarchar ו-money, ואת הפקודה GO שמסיימת את הקטע.
טעויות נפוצות
לא מספיק לבנות פרוצדורה, צריך גם לקרוא לה בקוד. בנוסף, כל כפתור שמפעיל פרוצדורה חזר על אותן הגדרות חיבור, וזה הוביל למסקנה שצריך ארכיטקטורה מסודרת, כלומר מודל שכבות.
שימו לב
פרוצדורה מהירה משאילתה רגילה, כי היא מקומפלת כבר בשמירה. בנוסף אפשר לתת הרשאה להפעלת הפרוצדורה בלי לתת גישה ישירה לטבלה.
השיעור הבא בקורס: מודל שכבות - DAL

פרקי ההרצאה: קריאה ל-Stored Procedure

  1. 00:00

    מהי Stored Procedure

  2. 00:43

    פירוש וקומפילציה של שאילתה

  3. 02:35

    יתרונות ה-Stored Procedure

  4. 04:21

    יתרון האבטחה

  5. 05:16

    בניית Stored Procedure

  6. 06:11

    הגדרת פרמטרים

  7. 10:00

    קריאה מ-ADO.NET

  8. 13:32

    הגדרת CommandText ופרמטרים

תמלול ההרצאה: קריאה ל-Stored Procedure

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

  1. 00:02

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

  2. 00:24

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

  3. 00:41

    מה היה לנו בעצם עד עכשיו לפני שהשתמשנו ב-Stored Procedures? עד עכשיו אתר האינטרנט שלנו יצר שאילתא שזאת סך הכל מחרוזת ושלח אותה כמו שהיא למסד הנתונים.

  4. 00:56

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

  5. 01:17

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

  6. 01:29

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

  7. 01:49

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

  8. 02:15

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

  9. 02:39

    הזאת יכולה לגשת לטבלה ולעשות בטבלה מה שאנחנו הגדרנו בתוך ה-Stored Procedure. מה היתרונות בשימוש ב-Stored Procedures?

  10. 02:50

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

  11. 03:09

    כולם יכולים להשתמש באות ה-Stored Procedure. אם היינו צריכים לכתוב את הקוד הזה כשאילתות sql בנפרד אז בכל אתר או בכל מערכת שניגשת לאותו מסד נתונים היינו צריכים מחדש לכתוב את זה מה זאת אומרת אבל שיש מספר אתרים או מספר אפליקציות שניגשות למסד הנתונים יכול להיות שיש את האתר שלנו לדוגמה בוא ניקח את ynet שניגש למסד הנתונים יכול להיות שיש אתר שהוא back office שמתאר גישה עבור המעצבים

  12. 03:41

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

  13. 03:57

    לכן יכול להיות לנו כל מיני מערכות שונות שניגשות לאותו מסד נתונים ואם יש לנו stored procedures כולם יכולים להשתמש עם אותו קוד. יתרון שני ה-stored procedure כפי שראינו היא הרבה יותר מהירה מביצוע שאילתא רגילה בגלל שה-stored פרסידג'ר כבר עברה קומפילציה ונמצאת בתוך מסד הנתונים ולא צריכה לעבור קומפילציה

  14. 04:20

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

  15. 04:44

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

  16. 05:04

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

  17. 05:30

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

  18. 05:50

    הקודמת ומאפשרת עכשיו לבנות פקודה חדשה. ראינו את זה בנושא ה-SQL Server. עכשיו אנחנו בונים סטורט פרסיג'ר. הקוד לבניית סטורט פרסיג'ר הוא create_procedure נותנים לה שם לדוגמה add product.

  19. 06:07

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

  20. 06:24

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

  21. 06:50

    בואו נסתכל רגע בדיזיין של product. ואז אנחנו נוכל לראות ש-product name הדאטה טייפ שלו, כלומר סוג הנתונים שניתן לאחסן בו זה nvarchar 40. תזכורת nvarchar זה סטרינג והאות n זה קיצור של national, כלומר היכולת לשמור תווים מכל מיני ארצות, גם עברית, גם צרפתית, גם ערבית, גם רוסית, מה שבא לנו.

  22. 07:19

    כאשר אם היה לנו רק varchar אז לא היינו יכולים לשמור תווים מארצות שונות אלא רק אנגלית ותווים נפוצים שבמקלדת. ולכן יש לנו פה n ורצ'ר.

  23. 07:30

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

  24. 07:56

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

  25. 08:09

    דבר הבא, אני רושם את המילה as ומתחיל לכתוב את הקוד של ה-Stored Procedure. והקוד הוא סך הכל שאילתת אינסרט, פשוטה. Insert into Products לתוך Product Name ולתוך Unit Price את ה-Values שקיבלתי פה למעלה, ואני יכול עכשיו להעתיק את הפרמטרים האלה ולהדביק

  26. 08:34

    אותם ב-Values והם הולכים להיכנס לתוך טבלת product לפי השאילתה הזאת. אחרי שסיימתי לכתוב את קוד השאילתה אני רושם go, וכל מה שנשאר לי לעשות זה רק להריץ את זה.

  27. 08:46

    בואו נריץ, ונראה שהמערכת כותבת לי command completed successfully. אבל מה בעצם המערכת עשתה כרגע? מה ה-SQL Server עשה?

  28. 08:56

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

  29. 09:17

    בואו נראה אפילו שאני מוחק אותה, מחקתי את ה-Stored Procedure, אני מריץ שוב פעם את השאילתא הזאת, שוב אני רואה Command Completed Successfully ואני מבצע רפרש על המידע והופה, ה-Stored Procedure הזאת חזרה.

  30. 09:34

    אז בעצם לא קראתי ל-Stored Procedure בפקודה הזאת אלא בניתי אותה, זה שני דברים שונים. אם הייתי קורא לה אז כמובן הייתי צריך להביא לה פרמטרים שהיא הייתה יכולה להוסיף אותם לטבלת המוצרים על ידי פקודת ה-insert.

  31. 09:49

    אז כעת בנינו stored procedure אחת שמאפשרת להוסיף מוצר חדש. בואו עכשיו ניגש ל-idio.net ונבנה את הקוד בשביל לקרוא לה. אז ב-idio.net, או יותר נכון באתר האינטרנט שלנו ראשית, נבנה לחצן, ASP.2 בטון, ניתן לו ID שווה btn add product run it server text add product,

  32. 10:22

    נגיע לקוד של הלחצן הזה בכדי לכתוב קוד ב-ado.net לצורך קריאה ל-stored procedure. אנחנו רואים שיש את הבאג הזה של visual studio, דבר שאפשר לעשות זה פשוט לסגור את הסלושן ולחזור בחזרה לפרויקט הזה ולקוות שכרגע הוא כן יצליח להציג לי את הנתונים.

  33. 10:47

    מצליח. Add product ואנחנו נמצאים בקוד של הלחצן. אוקיי, אז מה אנחנו צריכים לכתוב כאן? אז ראשית אנחנו צריכים שיהיה לנו קונקשן ולכן נגדיר sql-connection.

  34. 11:08

    שווה new sql-connection ניתן ל-connection את ה-connection-string על ידי ה-configuration-manager נגדיר כאן שם לדוגמה my-northwind-constr.connection-string אנחנו צריכים רק לדאוג שה-connection הזה בעצם נמצא לנו ב-app-config או ב-web-config אם אנחנו באתר אינטרנט בואו נסתכל נלך לתגית connections נוסיף add

  35. 11:55

    קונקשן סטרינג כאשר קודם כל נוסיף name שווה לשם שהגדרנו והקונקשן סטרינג שווה לקונקשן סטרינג שראינו מקודם. אז יש לנו כאן server שווה .sql express יש לנו כאן data base שווה northwind ויש לנו כאן trusted connection שווה true. בואו נשמור, נחזור בחזרה.

  36. 12:36

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

  37. 13:01

    הדבר הבא שאני צריך זה אובייקט sql-command, הוא מסוגל להוציא לפועל סטורט פרוסיג'רס. בואו נבנה קומנד ונתחיל להגדיר לו את ההגדרות הדרושות. הגדרה ראשונה שאני רוצה לומר לו זה לאיזה סטורט פרוסיג'ר לקרוא command.commandText מקבל את השם של ה-StoredProcedure המדויקת כפי שהיא נכתבת בתוך מסד הנתונים

  38. 13:27

    והשם הוא AddProduct. לפני זה חשוב ללכת ל-Command ולהגדיר לו מי ה-Connection שלו כפי שראינו בעבר. לאחר מכן אני מוסיף ל-Command פרמטרים על ידי אוסף הפרמטרים ומגדיר פרמטרים חדשים שבעצם אלה הפרמטרים שצריכים להישלח ל-StoredProcedure.

  39. 13:54

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

  40. 14:14

    אז בואו נעתיק את הקוד הזה ctrl c, נדביק אותו פה וזה השם המדויק של הפרמטר שאליו אני רוצה לשלוח את הערכים. הדבר הבא שאני רוצה לעשות, אני רוצה לשלוח ערך אמיתי.

  41. 14:27

    אז בואו כרגע נשלח מוצר בקוד, לדוגמה יש לנו ביסלי, נשכפל את הפרמטר לפרמטר נוסף שנקרא UnitPrice, וערכו הולך להיות 6.4. הדבר הבא שאני צריך לומר לקומאנד זה CommandType.

  42. 14:55

    מה זה בדיוק CommandType? CommandType זה אינאם

לקורס המלא: קורס ADO.NET אונליין

ההרצאה הקודמת: Dataset - מפתח ראשי - Primary Key

ההרצאה הבאה: מודל שכבות - DAL

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

  • הכל על Stored Procedure
  • שימוש ב-Stored Procedure - על-ידי DTO
  • קריאה וכתיבה לקובץ ב-NodeJS
  • הרשאות קריאה מורחבות ב-NTFS

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

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס תכנות מתקדם - #Advanced .NET C
  • קורס WCF - תקשורת למתקדמים בדוט-נט