PracticU

עבודה בקישור פתוח - Open Connectivity

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

עבודה בקישור פתוח - Open Connectivity
הרצאה זו מציגה את שיטת העבודה בקישור פתוח (Open Connectivity) במסד נתונים: פותחים חיבור לכל פעולה, מבצעים את הפקודה ישירות על הטבלה, וסוגרים את החיבור.
השלבים העיקריים
1. הכנת Command: אובייקט SqlCommand מקבל חיבור (Connection) ומחרוזת פקודה (CommandText). הפקודה יכולה להיות INSERT, UPDATE, DELETE או SELECT.
2. ExecuteNonQuery: מבצעים פקודות שאינן מחזירות נתונים, והתוצאה היא מספר הרשומות שהושפעו. המרצה מדגים זאת בהוספה, בעדכון ובמחיקה של מוצר.
3. ExecuteScalar: מחזירה ערך אחד בלבד, לדוגמה שם מוצר לפי מזהה.
4. ExecuteReader: מחזירה אובייקט קריאה שמתקדם רשומה אחר רשומה בעזרת Read(). הערכים נקראים לפי שם העמודה ומוצגים, לדוגמה ברשימה.
5. פרמטרים: במקום לשרשר ערכים מתיבות הטקסט לשאילתה, משתמשים בפרמטרים עם סימן @. כך גרשיים בשם מוצר אינם שוברים את השאילתה.
טעויות נפוצות
המרצה מדגים שאם שם מוצר מכיל גרש (apostrophe), השאילתה נשברת ונזרקת שגיאה. הפתרון של הכפלת הגרש אפשרי, אבל קל לשכוח אותו, ולכן עדיף פרמטרים. ExecuteNonQuery דורשת שהחיבור יהיה פתוח, אחרת מתקבלת שגיאה. גם ExecuteReader מחייב חיבור פתוח כל עוד קוראים ממנו. סגירת החיבור לפני קריאת הרשומות מובילה לשגיאה של קריאה מ-reader סגור.
שימו לב
בשיטת הקישור הפתוח המידע תמיד מעודכן, כי כל פעולה נכתבת ישירות למסד. החיסרון הוא שכל פעולה צורכת משאבי רשת, ולכן כדאי לפתוח את החיבור מאוחר ככל האפשר ולסגור אותו מוקדם ככל האפשר.
השיעור הבא בקורס: עבודה בקישור סגור - Dataset

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

  1. 00:00

    שתי שיטות העבודה ב-ADO.NET

  2. 01:33

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

  3. 03:27

    כתיבה בקישור הפתוח

  4. 04:21

    בניית שאילתת INSERT

  5. 05:37

    הרצה עם ExecuteNonQuery

  6. 08:44

    קבלת נתונים מתיבות טקסט

  7. 10:19

    שילוב המידע בשאילתה

  8. 12:10

    בעיית הגרש בשאילתה

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

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

  1. 00:01

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

  2. 00:13

    כשאנחנו עובדים עם מסד נתונים, יש לנו ב-adio.net שתי שיטות עבודה. שיטה ראשונה נקראת עבודה בקישור פתוח או באנגלית Open Connectivity. שיטה שנייה נקראת עבודה בקישור סגור או Close Connectivity שאנחנו בהמשך נראה מה זה אומר.

  3. 00:30

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

  4. 00:42

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

  5. 01:05

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

  6. 01:24

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

  7. 01:34

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

  8. 02:06

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

  9. 02:14

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

  10. 02:33

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

  11. 02:50

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

  12. 03:11

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

  13. 03:34

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

  14. 03:49

    האובייקט הזה הוא מטיפוס sql command. נגדיר את האובייקט הזה, ונגדיר לו מי ה-connection שלו שמתאר את מסד הנתונים, כי יכול להיות שיש לנו מספר מסדי נתונים שהאתר עובד איתם.

  15. 04:06

    ה-connection זה האובייקט שמתאר בדיוק את מיקום מסד הנתונים. ואני פשוט אכניס לתוך command.connection את ה-objectcon.

  16. 04:16

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

  17. 04:31

    בואו בתור התחלה נבצע שאילתת הוספה, כלומר insert. אז אני מבצע insert into products. אנחנו כרגע נעבוד על מסד הנתונים northwind ונוסיף רשומה חדשה לטבלת product.

  18. 04:47

    אני כמובן מתאר לאיזה עמודות אני רוצה להוסיף את המידע החדש product name unit price ואיזה values אני רוצה להוסיף.

  19. 04:59

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

  20. 05:34

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

  21. 06:01

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

  22. 06:16

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

  23. 06:27

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

  24. 06:59

    נלך לסוף הטבלה ונראה שהמוצר האחרון שקיים בטבלה ה-ID שלו זה 77. אוקיי, נחזור לאתר, נלחץ על הלחצן וקודם כל האתר מראה לנו done affected rows 1, כלומר רשומה אחת הושפעה מהפקודה שביצענו.

  25. 07:19

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

  26. 07:29

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

  27. 07:54

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

  28. 08:09

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

  29. 08:41

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

  30. 08:59

    אני רואה שיש לי עמודה שנקראת Product Name, אני רואה שיש לי עמודה שנקראת Unit Price. לפי השמות של העמודות במסד הנתונים, אני נותן שמות לתיבות הטקסט, כאשר כמובן יש לתתחילי TXT. למה זה חשוב?

  31. 09:11

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

  32. 09:27

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

  33. 09:40

    בשביל לשלב את זה הדבר הנכון לעשות כרגע זה לפרמט את הפלט על ידי string.format אני רוצה להכניס לתוך product name ו-unit price את ה-values, במקום פלאפל אני רוצה לקחת מידע ראשון, במקום 12 וחצי אני רוצה לקחת את המידע השני.

  34. 10:07

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

  35. 10:24

    אז בואו נסתכל עכשיו איך אנחנו מוסיפים דרך זה מידע למסד הנתונים. נריץ את האתר, יש לנו כאן את תיבות הטקסט, ונכניס מידע "במבה" שעולה 4.6. שוב "Affected Rows" 1. נחזור למסד הנתונים, נרפרש ונסתכל על המידע האחרון שקיים ונראה שהמידע האחרון ואכן "במבה" שעולה 4.6. בואו רק נשנה את הטקסט של הלחצן הזה,

  36. 11:05

    כי הלחצן אמור לבצע הוספה של מידע ויש לנו פה Add Product. אוקיי עכשיו מה הבעיה שיכולה להיווצר כתוצאה מזה? בואו נריץ.

  37. 11:24

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

  38. 11:49

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

  39. 12:02

    אני לוחץ על add product ואני רואה שבעצם קרתה קריסה. המערכת אומרת לי שהיא לא זיהתה מה זה אומר s או משהו כזה.

  40. 12:14

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

  41. 12:40

    מה שנכנס לכאן היה 10. אין שום בעיה עם המחיר אבל בואו נסתכל איך נראית עכשיו השאילתה. השאילתה נראית בצורה כזאת insert into product לתוך product name ולתוך unit price את הvalues הבאים גרש מוישה גרש זאת אומרת שמבחינת השאילתה רציתי כאילו להכניס את השם מוישה ואז פתאום

  42. 12:52

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

  43. 13:26

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

  44. 13:55

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

  45. 14:21

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

  46. 14:35

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

  47. 14:52

    כמובן שגם מישהו היה יכול להכניס לי גרש במחיר,

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

ההרצאה הקודמת: חיבור למסד נתונים - Connection String

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

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

  • Open URL
  • עבודה עם VI - חלק 1
  • איך חברות קוד פתוח מרוויחות כסף
  • אתרי Open-Source Code כגון GitHub

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

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