PracticU

עבודה בקישור סגור - Dataset

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

עבודה בקישור סגור - Dataset
הרצאה זו מציגה את שיטת העבודה בקישור סגור (Closed Connectivity): מביאים עותק של הטבלה לזיכרון האתר, עובדים עליו מקומית, ואז שולחים בחזרה למסד הנתונים רק את השינויים.
השלבים העיקריים
1. הבאת העותק: יוצרים DataTable ומשתמשים ב-SqlDataAdapter עם SelectCommand. פעולת Fill פותחת את החיבור, מעתיקה את הנתונים וסוגרת את החיבור בעצמה.
2. שמירה במטמון: העותק נשמר ב-Cache של האתר, ולכן בבקשות הבאות לא צריך לגשת למסד. המרצה הדגיש שהמטמון משותף לכל הגולשים, ולכן שינוי של אחד נראה לכולם עד השמירה.
3. הצגה בגריד: מציבים את הטבלה כמקור הנתונים של DataGrid ומבצעים DataBind. מזהה המפתח מוגדר ב-DataKeyNames.
4. עריכה, ביטול ומחיקה: אירועי EditCommand, CancelCommand ו-DeleteCommand משנים את מצב השורה או מוחקים אותה מהטבלה המקומית. בעדכון מוצאים את השורה לפי המפתח ומכניסים אליה את הערכים החדשים.
5. שמירה למסד: הפעולה Update של האדפטר בודקת אילו שורות השתנו, ושולחת למסד רק אותן, כל אחת כפקודת INSERT, UPDATE או DELETE מתאימה.
טעויות נפוצות
כל עוד לא נשמר, המסד נשאר בגרסה הישנה, גם אם הגריד מציג את השינוי. לכן אם מרעננים את הדף לפני השמירה, המשתמש עלול לראות מידע שונה ממה שנשמר במסד. המרצה הזהיר גם שהטבלה שנשמרת במטמון חייבת לכלול את עמודת המפתח, אחרת אי אפשר לאתר את השורה לעדכון.
שימו לב
בשיטה זו הקישור סגור ברוב הזמן, ולכן מוקטנים משאבי הרשת. העבודה נעשית מול העותק המקומי, והמסד מתעדכן רק בפעולת השמירה.
השיעור הבא בקורס: Dataset - מפתח ראשי - Primary Key

פרקי ההרצאה: עבודה בקישור סגור - Dataset

  1. 00:00

    עבודה בקישור סגור

  2. 01:32

    בניית פונקציה להבאת מידע

  3. 02:29

    SqlDataAdapter ומילוי DataTable

  4. 05:22

    שמירת הטבלה ב-Cache

  5. 07:58

    הצגת הטבלה ב-DataGrid

  6. 09:36

    טעינה בעזרת IsPostBack

  7. 10:49

    שליטה בעמודות ה-GRID

  8. 13:27

    הוספת עמודת עריכה

תמלול ההרצאה: עבודה בקישור סגור - Dataset

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

  1. 00:01

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

  2. 00:11

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

  3. 00:34

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

  4. 00:54

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

  5. 01:08

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

  6. 01:22

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

  7. 01:35

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

  8. 01:48

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

  9. 02:00

    ב-idio.net קיים לנו אובייקט שמתאר טבלה. האובייקט הזה נקרא data table. ואנחנו נחזיר את טבלת product או שנחזיר איזה חלק ממנה.

  10. 02:17

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

  11. 02:29

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

  12. 02:43

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

  13. 03:00

    אבל בכל מקרה האובייקט הזה מחזיק לי מקומית בצד של האתר ב-sb.net את הטבלה. אוקיי, אז האובייקט הזה שהולך להביא לי את הנתונים ולמלא לי את הטבלה הזאת נקרא sql data adapter.

  14. 03:19

    בואו נבנה אובייקט חדש ממנו. והאובייקט הזה מקבל ראשית את שאילתת ה-sql שאנחנו רוצים בשביל להביא את הנתונים. בואו נביא את product ID, את product name ואת unit price מתוך products.

  15. 03:43

    הדבר הבא שהאובייקט הזה מקבל, נכתוב את זה פה למטה, זה את ה-Connection בשביל להתחבר למסד הנתונים. שוב, אנחנו לוקחים את ה-Connection מה-Web.config ולכן יש לנו פה configuration-manager.connection-strings ואנחנו מתחברים ל-Connection-String שאנחנו רוצים,

  16. 04:08

    שהשם שלו היה my-northwind-constr שם אנחנו רוצים את החלק של ה-Connection-String. אז כעת הגדרתי אובייקט Data Adapter שמסוגל להתחבר למסד הנתונים לפי ה-Connection הזה שקיים כאן, ולהביא לי את המידע שציינתי בשאילתת ה-SQL הזאת.

  17. 04:38

    השלב הבא שאנחנו רוצים לעשות זה למלא את ה-Data Table. בשביל למלא את ה-Data Table אנחנו משתמשים בפונקציה שנקראת Fill.

  18. 04:47

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

  19. 05:03

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

  20. 05:33

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

  21. 05:51

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

  22. 06:12

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

  23. 06:42

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

  24. 07:01

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

  25. 07:19

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

  26. 07:33

    וכמובן אני חייב להכניס אותו מיידית ל-cash. אז בואו נכניס אותו ל-cash, נשתמש בפונקציית insert, ניתן לה את המפתח product ואת אובייקט ה-data table, product table.

  27. 07:54

    אוקיי, אז אחרי שהבאנו את הטבלה בואו נציג אותה. בכדי להציג אותה נשתמש ברכיב פשוט שמסוגל להציג טבלה שנקרא ASP.2 DataGrid. ניתן לו ID לדוגמה מייגריד, run את שווה סרבר כי זה רכיב צד שרת, ניגש לפייג' לואוד כאשר הדף נטען, אנחנו רוצים בעצם להביא את הטבלה או ממסד הנתונים במקרה הזה אם היא עדיין היא לא קיימת

  28. 08:32

    או מאובייקט ה-cash אם היא כבר קיימת ב-cash. בשביל להציג אותה מה שאנחנו צריכים לעשות זה דבר כזה מייגריד נקודת data source, כלומר מקור הנתונים שלו שווה ונביא את הטבלה.

  29. 08:51

    לאחר מכן אנחנו צריכים לקרוא לפונקציה data bind בכדי לייצר מהטבלה הזאת html עבור הרכיב וכך הוא יוכל להציג אותה. בואו נבדוק את זה. אז אנחנו רואים כרגע את הטבלה מוצגת לנו וכל המוצרים מוצגים בטבלה כאשר מה שהבאנו זה שלוש עמודות product id product name וuniprice.

  30. 09:17

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

  31. 09:28

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

  32. 09:45

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

  33. 09:55

    בשביל לא לטעון את הנתונים האלה שוב כל מה שאנחנו צריכים לעשות בפייג' לואוד זה לבדוק האם אנחנו בגלישה הראשונה בלבד לדף אז אנחנו משתמשים בפרמטר isPostBack תזכורת postBack זה ביטוי שמדבר על גלישה שנייה לדף אחרי שלדוגמא הלקוח לחץ על לחצן או לינק והגיע עוד פעם לאתר אז אם isPostBack זה true זה אומר שאנחנו גלישה שנייה ומעלה שנייה שלישית רביעית וכולי אם זה לא אז אני בעצם

  34. 10:32

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

  35. 10:45

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

  36. 11:07

    בשביל זה אני מגדיר לעצמי עמודות שנמצאות בתוך הגריד. ויש לנו פרמטר שנקרא columns ובתוכו אני מגדיר איזה עמודות אני רוצה שיהיו לי בגריד. ראשית אני רוצה עמודה שנקראת Product ID בשביל להציג את ה-Product ID, או יותר נכון לתאר את ה-Product ID. אני לא רוצה לראות אבל את ה-Product ID ולכן Visible שווה False.

  37. 11:39

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

  38. 11:47

    במידה ואני לא רוצה לראות אותו שזה בדרך כלל מה שקורה במציאות אף אחד מהלקוחות לא אמור לראות את ה-ID של כל מוצר ומוצר אז אני מגדיר ויזיבול שווה פולס אף אחד לא הולך לראות את העמודה הזאת למרות שהיא קיימת.

  39. 12:01

    העמודה הבאה שאני רוצה להציג אמורה להציג את product name ואני יכול לתת לה header text שזה לדוגמה product name נקודותיים. עמודה נוספת זאת העמודה של המחיר בואו נגדיר פה את unit פרייס והטקסט שיהיה כתוב עליה פרייס אלה שלושת העמודות שאני רוצה להציג בעצמי בגריד בואו נריץ אנחנו כרגע רואים את הגריד ואנחנו לא רואים את העמודה product ID שאנחנו בעצם גם

  40. 12:47

    לא אמורים לראות אותה אנחנו אמורים לראות רק product name זה הטקסט שלה כל השמות של המוצרים את הפרייס ואת כל המחירים של המוצרים עכשיו אנחנו צריכים לעשות כל מיני פעולות לדוגמה update לדוגמה delete לדוגמה save בואו נראה איך אנחנו עושים אותם נחזור בחזרה לגריד נציג אותו בדיזיין ונוסיף לגריד דרך פרופרטי

  41. 13:13

    בילדר עמודה מיוחדת. העמודה הזאת נקראת Edit Update Cancel. נוסיף אותה לפני זה, מבצע אוקיי. ואנחנו רואים שיש לנו פה עמודה של Edit. בקוד מה שהמערכת הוסיפה לי זאת עמודה נוספת שנקראת Edit Command Column ויש לה הגדרות לגבי הטקסטים שמוצגים שגם אותם אני יכול לשנות.

  42. 13:47

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

  43. 14:16

    ששייכים לגריד בואו נבחר אותו נציג את חלון המאפיינים נציג את האירועים של חלון המאפיינים והאירוע הראשון שאנחנו הולכים לכתוב נקרא edit command בואו נאתר אותו הנה הוא כאן דאבל קליק עליו פותח את האירוע edit command עבור הגריד מה שאנחנו צריכים לומר באירוע הזה זה ראשית לתת הוראה לגריד

  44. 14:43

    לעבור למצב עריכה עבור הרשומה הספציפית הזאת וזה מתבצע על ידי הפקודה

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

ההרצאה הקודמת: עבודה בקישור פתוח - Open Connectivity

ההרצאה הבאה: Dataset - מפתח ראשי - Primary Key

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

  • עבודה עם VI - חלק 1
  • עבודה עם UIPickerView
  • איך נראת עבודה אמיתית
  • מבוא לקורס ראיונות עבודה ב-QA - חלק 1

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

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