
הטקסט המלא של הדקות הראשונות בהרצאה «עבודה בקישור פתוח - Open Connectivity» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אוקיי, אז עכשיו אחרי שראינו איך אנחנו מבצעים קישור למסד הנתונים, אנחנו עכשיו הולכים לבצע פקודות מסוימות שיכניסו מידע למסד הנתונים או שיקראו מידע ממסד הנתונים.
כשאנחנו עובדים עם מסד נתונים, יש לנו ב-adio.net שתי שיטות עבודה. שיטה ראשונה נקראת עבודה בקישור פתוח או באנגלית Open Connectivity. שיטה שנייה נקראת עבודה בקישור סגור או Close Connectivity שאנחנו בהמשך נראה מה זה אומר.
מה זה אומר עבודה בקישור פתוח? יש לנו את אתר האינטרנט, האתר ויש לנו דייטאבייס שמכיל את הטבלאות שלנו. בוא נניח שיש לנו פה טבלה.
עכשיו אני רוצה לבצע פעולה בעבודה בקישור פתוח. אז מה זה אומר בעצם? זה אומר שאני צריך ליצור קונקשן, זה הקו הזה שראינו מקודם, מהאתר שלי אל מסד הנתונים ואז אני זורק את הפקודה שאני רוצה ישירות על הטבלה שנמצאת בתוך מסד הנתונים וכותב ישירות אליה.
ברגע שעשיתי את זה המידע נשלח מהמסד נתונים על לגבי הקישור ישירות לטבלה שנמצאת במסד הנתונים, כאשר מה שאני יכול לעשות זה הוספה של שורה חדשה, עדכון רשומה קיימת, מחיקת רשומה מסוימת שקיימת במסד נתונים או קריאת מידע או כל פעולה אחרת שמתבצעת ישירות על הנתונים
במסד הנתונים. אז מה זה אומר עבודה בקישור סגור שאנחנו נראה את זה בהמשך? רק בשביל לבצע את ההבדל כרגע בואו נסביר את זה.
עבודה בקישור סגור מתארת דבר כזה, אני לא כותב את המידע ישירות אל מסד הנתונים. מה שאנחנו עושים בעבודה בקישור סגור זה משכפלים עותק של הנתונים או של הטבלה ממסד הנתונים אל צד האפליקציה שלנו, אל אתר האינטרנט, כותבים בתוך העותק הזה את מה שאנחנו רוצים כאשר הוא נמצא בתוך אתר האינטרנט שלנו.
כל הדבר הזה מתבצע אחרי שהבאנו את הטבלה כאשר אין לנו קישור יותר, זאת אומרת שהקישור היה רק לצורך הבאת עותק הנתונים.
לאחר מכן, אחרי שכתבנו מקומית את המידע בטבלה משלנו, או יותר נכון בעותק מטבלה שנמצאת אצלנו באתר, אז אנחנו יוצרים מחדש קישור, לוקחים את העותק הזה שביצענו ושולחים אותו בחזרה למסד הנתונים בכדי שהוא יעדכן את המידע.
זאת אומרת שבעבודה בקישור פתוח אנחנו כתבנו ישירות על המידע המקורי במסד הנתונים, בעבודה בקישור סגור אנחנו כתבנו את המידע על עותק אצלנו בצד של האתר ולאחר שסיימנו שלחנו את המידע ישירות למסד הנתונים.
אז כרגע אנחנו הולכים לראות מה זה עבודה בקישור פתוח. אז בואו נראה איך זה מתבצע. נחזור לאתר האינטרנט שלנו ומה שביצענו מקודם זה שפתחנו קונקשן, הגדרנו את ההגדרות של ה-Connection String, אותם לקחנו ישירות מה-Web.config בשביל לבדוק האם הקונקשן עובד כמו שצריך,
כל מה שעשינו זה רק פתחנו אותו וסגרנו אותו. בואו נבדוק שזה כרגע פעיל ועובד, נלחץ על הלחצן ונראה שהוא מצליח לבצע פתיחה וסגירה. כעת מה שאנחנו רוצים לעשות זה לכתוב מידע בשיטת הכישור הפתוח ישירות לתוך מסד הנתונים.
אז שיטת הכישור הפתוח אומרת דבר ראשון פתח קונקשן. עכשיו אני רוצה לבצע פקודה, אז איך בעצם אני מבצע פקודה על מסד הנתונים? בשביל לבצע פקודה אני צריך שיהיה לי אובייקט שמסוגל להוציא לפועל פקודה.
האובייקט הזה הוא מטיפוס sql command. נגדיר את האובייקט הזה, ונגדיר לו מי ה-connection שלו שמתאר את מסד הנתונים, כי יכול להיות שיש לנו מספר מסדי נתונים שהאתר עובד איתם.
ה-connection זה האובייקט שמתאר בדיוק את מיקום מסד הנתונים. ואני פשוט אכניס לתוך command.connection את ה-objectcon.
לאחר שיש לי בדיוק איפה המסד הנתונים נמצא על ידי ה-connection, אני צריך לתאר את הפקודה הרצויה. בעזרת הפרמטר command-text אני מתאר את הפקודה כשאילתת sql רגילה.
בואו בתור התחלה נבצע שאילתת הוספה, כלומר insert. אז אני מבצע insert into products. אנחנו כרגע נעבוד על מסד הנתונים northwind ונוסיף רשומה חדשה לטבלת product.
אני כמובן מתאר לאיזה עמודות אני רוצה להוסיף את המידע החדש product name unit price ואיזה values אני רוצה להוסיף.
בואו נוסיף כרגע מוצר חדש ומחיר בגלל שהמחיר הוא לא מכרוזתי אלא מספרי אני לא צריך לעטוף אותו בגרש גרש כאשר המידע הוא מכרוזתי כלומר טקסטואלי אני כן צריך לעטוף אותו בגרש גרש את המידע עצמו אוקיי אז בוא נניח ששואה ארמה עולה סליחה פלאפל עולה 12 וחצי ותיארתי כרגע את הפקודה לביצוע כל מה שנשאר לי לעשות עכשיו זה להוציא אותה לפועל בשביל להוציא את הפקודה
הזאת לפועל אני קורא לפונקציה שנקראת אינסקיוט נון קווירי פונקציית אינסקיוט נון קווירי מה שהיא מבצעת זה הוצאה לפועל של פקודות שנכתבו בקומנד טקסט או פרמטר קומנד טקסט כאשר הפקודות האלה לא אמורות להחזיר לי בחזרה נתונים כלומר זה לא פקודות סלקט פקודות שבדרך כלל מוצאים לפועל בקומנד טקסט
זה insert כמו שעשינו כאן update או delete יכלתי גם להוציא לפועל כל פקודה אחרת שאינה סלקט אוקיי הפונקציה הזאת כן מחזירה לי אבל אינטג'ר, אני יכול לראות את זה כאן.
האינטג'ר שהיא מחזירה לי זה בעצם מספר הרשומות שהושפעו מהפעולה שעשיתי. כרגע כמובן הולכת להיות מושפעת רשומה אחת כי הוספתי רק רשומה אחת.
בואו נקבל את זה אבל בחזרה למשתנה שנקרא affected role ונציג אותו פה. אוקיי, בואו נבדוק את זה. נריץ את האתר ולפני שאני אלחץ על הלחצן אני רוצה לראות מה יש לי בתוך טבלת products במסד הנתונים.
נלך לסוף הטבלה ונראה שהמוצר האחרון שקיים בטבלה ה-ID שלו זה 77. אוקיי, נחזור לאתר, נלחץ על הלחצן וקודם כל האתר מראה לנו done affected rows 1, כלומר רשומה אחת הושפעה מהפקודה שביצענו.
נסגור את הדף, נחזור לאתר ונלחץ על הלחצן הזה של הסימן קריאה לצורך רפרוש הנתונים. נרפרש.
נלך לסוף הטבלה ונראה שהוספנו כאן מוצר חדש שנקרא פלאפל, המחיר שלו 12.5 ואוטומטית מסד הנתונים נתן לנו מספר עבור המוצר החדש ID 78. זאת אומרת שהצלחנו להוסיף כרגע מוצר חדש לתוך מסד הנתונים בעזרת פקודת SQL insert.
כמובן שאנחנו צריכים לקחת את הנתונים לא בצורת הקוד, כלומר לא hardcoded שהם צרובים בקוד, אלא דרך תיבות טקסט שמגיעות מהדף אינטרנט שלנו, אז בואו נוסיף את זה.
נלך לאתר ונוסיף תיבות טקסט להוספת מוצר חדש. אז יש לנו ספאם, פרודקט ניים, יש לנו תיבת טקסט, טקסט בוקס, איי-די, טי-אקס-טי פרודקט ניים, יש לנו run את שווה סרבר, זו תיבת טקסט אחת, בואו נראה את שורה, אותו דבר נשכפל עבור יוניט פרייס,
נקרא לזה פרייס, ותיבת הטקסט הולכת להיות טי-אקס-טי יוניט פרייס. איך אני בוחר את השמות של התיבות טקסט שלי? מה שאני עושה, אני מסתכל על מסד הנתונים ואני רואה מה השמות של העמודות שקיימות בתוך מסד הנתונים.
אני רואה שיש לי עמודה שנקראת Product Name, אני רואה שיש לי עמודה שנקראת Unit Price. לפי השמות של העמודות במסד הנתונים, אני נותן שמות לתיבות הטקסט, כאשר כמובן יש לתתחילי TXT. למה זה חשוב?
זה חשוב אחר כך בשביל שאם אני מסתכל על האתר שלי ובודק איך השמות מביאים לי את המידע ישירות בשביל להיכנס במסד הנתונים וחוסך לי המון בעיות ואני רואה בעצם ש-txt unit price הולכת כנראה להכניס מידע לעמודת unit price במסד הנתונים.
מאוד נוח לעבוד בצורה כזאת. אז יש לנו כאן את התיבות טקסט, יש לנו את הלחצן ומה שנשאר לנו לעשות זה לשלב את המידע מתיבות הטקסט בתוך שאילתת ה-sql שלנו.
בשביל לשלב את זה הדבר הנכון לעשות כרגע זה לפרמט את הפלט על ידי string.format אני רוצה להכניס לתוך product name ו-unit price את ה-values, במקום פלאפל אני רוצה לקחת מידע ראשון, במקום 12 וחצי אני רוצה לקחת את המידע השני.
עכשיו אני פשוט מגדיר txt product name text, txt unit price text, ובצורה כזאת הצלחתי להכניס את המידע מתיבות הטקסט לתוך השאילתא, לשלב אותם בשאילתא עצמה.
אז בואו נסתכל עכשיו איך אנחנו מוסיפים דרך זה מידע למסד הנתונים. נריץ את האתר, יש לנו כאן את תיבות הטקסט, ונכניס מידע "במבה" שעולה 4.6. שוב "Affected Rows" 1. נחזור למסד הנתונים, נרפרש ונסתכל על המידע האחרון שקיים ונראה שהמידע האחרון ואכן "במבה" שעולה 4.6. בואו רק נשנה את הטקסט של הלחצן הזה,
כי הלחצן אמור לבצע הוספה של מידע ויש לנו פה Add Product. אוקיי עכשיו מה הבעיה שיכולה להיווצר כתוצאה מזה? בואו נריץ.
הבעיה שיכולה להיווצר זאת הבעיה הבאה. מה קורה אם יש לי שם מוצר שנקרא מוישז שאווארמה שעולה בוא נניח 10. מה שעשיתי כאן והכנסתי שם של מוצר שיש לו גרש בשם עצמו.
כמובן שיכול להיות שם כזה. הבעיה עם הגרש זה לא הבעיה עם השם, כלומר שם כזה הוא חוקי לגמרי מבחינת שמות שאני רוצה להכניס למסד נתונים. אבל בואו נסתכל מה יקרה עכשיו אם אני מנסה להכניס את זה.
אני לוחץ על add product ואני רואה שבעצם קרתה קריסה. המערכת אומרת לי שהיא לא זיהתה מה זה אומר s או משהו כזה.
מה קרה כאן בעצם? בואו נחזור בחזרה לשאילתה ונראה מה קרה בשאילתה. אז מה שקרה בשאילתה זה דבר כזה, השם שנכנס לכאן היה מוישה גרש s ואז היה לנו שווארמה.
מה שנכנס לכאן היה 10. אין שום בעיה עם המחיר אבל בואו נסתכל איך נראית עכשיו השאילתה. השאילתה נראית בצורה כזאת insert into product לתוך product name ולתוך unit price את הvalues הבאים גרש מוישה גרש זאת אומרת שמבחינת השאילתה רציתי כאילו להכניס את השם מוישה ואז פתאום
תקועה לי פה s כמובן שאני לא רציתי להכניס רק מוישה אני רציתי להכניס את כל הביטוי הזה אבל מבחינת השאילתה הגרש סגר לי את הגרש הזה ואז מסד הנתונים או יותר נכון בעצם השאילתה עצמה הייתה פגומה כי יש לי פה כאילו s.
ואיך אני פותר את הבעיה הזאת? שיטה אחת שהיא פחות טובה זה כל פעם שאני רוצה להכניס s בתוך השאילתה אני צריך לשכפל אותה לפעמיים. זאת אומרת שמה שהייתי יכול לעשות זה בפרודקט name הייתי יכול להגדיר נקודה ריפלייס זאת פונקציה גרש אחת תחליף לי בפעמיים גרש.
ברגע שהייתי עושה את הדבר הזה זה היה פותר את הבעיה. בואו נבדוק את זה. נכניס כאן שוב 0, נכניס כאן שוב אחד, נריץ את האתר, שוב נגדיר את אותו השם בדיוק עם המספר 10, Add product, וכעת הוא הצליח.
בואו נסתכל מה הוא כתב לי בתוך מסד הנתונים. נרפרש, נסתכל על המידע, ונראה שבתוך מסד הנתונים הוא אכן הצליח להכניס את הגרש כחלק מהמידע עצמו.
אני רואה שהגרש נמצא פה כחלק מהמידע. וכמובן את המספר 10 הוא הכניס בלי שום בעיה. אז מה בדיוק הבעיה בדרך שעשינו? מה שקורה זה שאני הייתי צריך עכשיו ללכת לכל פרמטר שהגדרתי ולזכור לעשות את הדבר הזה.
כמובן שגם מישהו היה יכול להכניס לי גרש במחיר,