
הטקסט המלא של הדקות הראשונות בהרצאה «חיבור למסד נתונים - Connection String» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, היום בשיעור אנחנו סוף סוף רואים איך אנחנו הולכים לקשר את האתר שלנו עם מסד הנתונים. אז הנושא השיעור היום זה קישור למסד הנתונים.
ראשית, בואו נסתכל מה זה אומר שתוכנה לוקחת נתונים ממסד הנתונים. בואו ניכנס לדוגמה ל-ynet. ב-ynet אנחנו רואים שיש לנו קודם כל כמובן אתר אינטרנט, אנחנו רואים שהדפדפן מציג לנו דף html, אבל יש פה המון המון מידע, אנחנו רואים פה את הכתבות עצמן, אנחנו רואים כאן כל מיני פרסומות או כל מיני
כתבות נוספות שעולות למעלה בצורה דינמית. אנחנו רואים פרסומות שיש באתר, אנחנו רואים מלא מלא מידע. למה בעצם שהמידע הזה יגיע ממסד נתונים? למה לא פשוט לכתוב את הדף html הזה כמו שהוא ואז כל הגולשים פשוט מסתכלים על הדף ואין לנו בכלל מסד נתונים?
אז בואו נסתכל למה באמת אנחנו כן צריכים מסד נתונים שמחזיק לנו את כל הנתונים באתר בשביל שהדף לוקח את המידע בעצם ממסד הנתונים. ולא צריך כל הזמן לכתוב אותו מחדש. אז בואו נסתכל על סכמה שמסבירה את זה.
ראשית, יש לנו כאן את האתר אינטרנט עצמו שמציג את המידע. גולשים, גולשים לאתר אינטרנט. עכשיו, בוא נניח שכתבים היו צריכים לשים את המידע שלהם ישירות בדפי האינטרנט.
זה אומר שהיו כתבים שבאים, מביאים את המידע למתכנתים, והמתכנתים כל הזמן היו צריכים לעדכן דפי אינטרנט באתר, לדוגמה לכתוב מחדש כל הזמן את הדפים האלה ואז הלקוחות היו רואים את הדפים.
הדבר הזה גורם כמובן לאי נוחות מאוד מאוד גדולה מפני שכל הזמן צריכים להתעסק עם html וכל הזמן לכתוב html.
עכשיו בואו נראה מה החלופה. החלופה היא שישנו אתר שמנהל את מסד הנתונים וזה נקרא Back Office. הכתבים עצמם מביאים את המידע שלהם למתכנתים או יותר נכון לאורכים שנכנסים לאתר ניהול מסד הנתונים ויש להם ממשק מאוד מאוד פשוט בו הם מעלים את כל הכתבות וגם פרסומות או כל המידע שרוצים לראות באתר.
כל המידע הזה נכנס לתוך בסיס הנתונים, לדוגמה SQL Server שראינו, או לדוגמה מסדי נתונים אחרים כמו MySQL. מסד הנתונים רק מחזיק את הנתונים, הוא לא עושה איתם שום דבר אחר.
והאתר האמיתי שכל הגולשים גולשים אליו, שואב את המידע ממסד הנתונים. אז מה זה בעצם חסך לנו? זה חסך לנו שאנחנו לא צריכים יותר לכתוב דפי HTML.
אנחנו נכנסים, או יותר נכון האורחים נכנסים, לאתר מיוחד ודרך הממשק הזה הם רק מכניסים את המידע לתוך מסד הנתונים ואז המידע הזה נשאב אוטומטית לאתר האינטרנט.
אז כל מה שאנחנו רואים כאן בתוך האתר ynet בעצם זה מידע שנשאב לנו מתוך מסד הנתונים ורק מוצג. מישהו אחר יושב על ממשק back office ומכניס את המידע הזה לתוך מסד הנתונים.
מה שאנחנו הולכים לראות עכשיו ואיך לבצע את הקישור בין האתר האינטרנט שאנחנו בונים לבין מסד הנתונים רק בשביל שיהיה לנו איזשהו קשר שאחר כך נוכל גם להכניס מידע וגם להוציא מידע.
כמובן שאותו קישור שאנחנו רואים כאן ואותו קישור שאנחנו רואים כאן זה קישור בין אתר כלשהו לבין מסד הנתונים. מה שיש רק לזכור שבהחלט יש לנו דפי html באתר שהם שואבים את המידע ממסד הנתונים.
זאת אומרת שאת הדפי html האלה כתבו פחות או יותר פעם אחת והם רק מעדכנים את עצמם כטמפלייט במידע העדכני שנמצא במסד הנתונים אבל מי שכתב אותם כתב אותם די פעם אחת ולא צריך להתעסק איתם יותר כי כל פעם שאני גולש לדף הזה בצד השרת הוא אוטומטית לוקח את המידע הכי עדכני במסד נתונים שהחבר'ה שעדכנו את מסד הנתונים
עדכנו אותו לוקח אותו משלב אותו עם התבנית עצמה של דף ה html וכך ללקוח שגולש יש דף html מוכן בתשלובת עם המידע שהיה קיים במסד הנתונים אז לא צריך כל פעם לחזור ולכתוב מחדש דפי html.
אז בואו נראה איך אני מקשר את המסד נתונים שלי עם האתר או את האתר עם מסד הנתונים. אז ראשית יש לנו כאן אתר חדש וכל מה שאנחנו רוצים לעשות כרגע זה לחצן שבלחיצה עליו יוצר איזשהו קונקשן עם מסד הנתונים.
אז בואו נבנה לחצן, כמובן לחצן הזה צריך להיות צד שרת, כלומר לחצן sp.net, כדי שאיזשהו אירוע שמתבצע בצד של השרת יגרום לקשר בין האתר שלנו לבין מסד הנתונים.
מה שנעשה עכשיו זה נגיע לאירוע שלו שמתבצע בקוד ה-C-Sharp על ידי לחיצת דאבל קליק על הלחצן. בואו נלחץ עליו דאבל קליק, נגיע לאירוע שלו שמתבצע בצד השרת בקוד C-Sharp, וכאן אני רוצה ליצור את הקישור למסד הנתונים.
אז איך זה מתבצע? אז ראשית כל דבר ב-dotnet זה אובייקט. אז יש לנו מחלקה שמיוחדת בכדי לתאר קישור למסד נתונים SQL Server. המחלקה הזאת נקראת SQL Connection.
אם אני כרגע לא רואה אותה בחלון ההצעות שנפתח לי, זה אומר שיכול להיות שהמחלקה הזאת לא מוכרת כרגע על ידי הקובץ הנוכחי.
בשביל שהיא תהיה מוכרת אני יכול ללכת כאן ל-smart tag ולומר לו להגדיר פקודת using בראש הקובץ. אני רואה שהוא מזהה שהמחלקה הזאת דורשת פקודת יוזינג.
פקודת יוזינג זאת פקודה שמגדירה לי שכל הפקודות שנמצאות בתוך הנתיב הזה, הנתיב הלוגי הזה, יוכרו על ידי הדף הנוכחי. אז אם אני לוחץ כרגע לחיצה, אני רואה שהוא הוסיף לי כאן למעלה את פקודת היוזינג, וכרגע אני רואה שהפקודה הזאת או המחלקה הזאת SQL Connection מוכרת לי.
אני יכול עכשיו ליצור אובייקט ממנה. יצרתי כרגע אובייקט פשוט ממחלקה שאמורה לתאר לי רק את הקישור למסד נתונים. עכשיו חשוב להבין, המחלקה הזאתי, האובייקט הזה שיצרנו, לא יודע לעשות שום דבר עם מסד הנתונים.
האובייקט הזה לא יודע להכניס מידע למסד הנתונים, האובייקט הזה לא יודע להוציא מידע, הוא לא יודע לעדכן, הוא לא יודע לשנות, הוא לא יודע להוסיף.
כל מה שהוא עושה הוא מתאר קישור למסד, בכדי שאחר כך אנחנו נוכל דרך הקישור הזה לבצע איזה פקודות שאנחנו רוצים. כלומר, מה שאני בונה כרגע זה בעצם אותו קו שמקודם ראינו והקו הזה או הקו הזה בין אתר כלשהו לבין מסד הנתונים.
אנחנו כרגע נניח בונים את האתר הזה אז אני הולך ליצור רק את ה-Connection עצמו. אז בואו נמשיך. הדבר הבא שאני צריך לומר לאובייקט שלי זה תכונה שנקראת Connection String.
Connection String זו תכונה שהיא מכרוזתית שמתארת כל מיני פרמטרים לגבי איפה נמצא מסד הנתונים, באיזה סרבר הוא נמצא, באיזה מסד נתונים בדיוק הוא נמצא בתוך התוכנה ועוד כל מיני פרמטרים שונים.
אז בואו נראה מה הפרמטרים שאני מכניס לאותה מחרוזת בשביל לדעת איך להתחבר בדיוק למסד הנתונים. הפרמטר הראשון שאני מכניס למסד נתונים זה באיזה מחשב מסד הנתונים נמצא.
יכול להיות שהאתר שלי נמצא במחשב א' והמסד נתונים בכלל נמצא במחשב אחר באותה הרשת. לכן הפקודה הראשונה שאני מכניס זה סרבר. סרבר מתאר לי באיזה מחשב ברשת מסד הנתונים אכן נמצא.
אם המחשב המסד נתונים שלי נמצא במחשב המקומי אני יכול פשוט לרשום נקודה. אם המחשב המסד נתונים שלי נמצא במחשב אחר אני יכול פשוט לרשום את כתובת ה-IP או הכתובת המדויקת של המחשב השני שזה נמצא.
אם מסד הנתונים שלי זה גרסת SQL Express שזאת גרסה חינמית שמייקרוסופט מאפשרת להוריד מהאתר שלה, ואני חייב לציין שזאת גרסה חינמית, גרסת האקספרס, על ידי הוספה של sql אקספרס.
עכשיו, הסיבה ששכפלתי את ה-backslash זה מפני שב-c-sharp ל-backslash יש משמעות אחרת. אם אני אגדיר רק backslash 1, אז אני רואה ש-c-sharp נותנת לי פה איזושהי הערה על ה-s.
ברמת העיקרון הייתי אמור לבצע רק backslash 1, אבל בגלל שאני בקוד של c-sharp, כל backslash חייב להיות משוכפל אם אני רוצה שהוא יהיה חלק מנתיב.
שיטה נוספת אומרת במקום לשכפל בקסלשים פשוט לפני המחרוזת להגדיר שטרודל ואז כפי שהרפי יודעת שכל הבקסלשים כאילו הם משוכפלים. אז נתון הראשון שהייתי חייב לציין לקונקשן סטרינג זה איפה באמת אתה נמצא ברשת.
נתון שני מופרד על ידי נקודה פסיק. הנתון השני שאני צריך לציין מציין בעצם איזה מסד נתונים אני רוצה להתחבר בתוך הסרבר וזה מתבצע על ידי דייטאבייס. מה הכוונה?
אם אנחנו נפתח כרגע את מסד הנתונים, אז הנה יש לנו פה את הדייטאבייס ונבין מה זה אומר דייטאבייס. הרי אנחנו יודעים ש-SQL Server זה הדייטאבייס, אבל בעצם SQL Server זה תוכנה שבתוכה אנחנו יכולים להגדיר מספר דייטאבייסס בלתי תלויים.
אנחנו יכולים לראות אותם כאן מתחת לתיקי הדייטאבייס. לדוגמה, פה אני רואה שיש לי דייטאבייס שנקרא קולג', אני רואה שיש לי דייטאבייס אחר שנקרא IW, אני רואה שיש לי דאטאבייס אחר שנקרא Northwind שזה הדאטאבייס החינמי של מייקרוסופט בשביל הדגמות ודמווים או דאטאבייס נקרא OCA או דאטאבייס
נקרא טקסולטור אז השאלה היא לאיזה מהם אני רוצה להתחבר כל אחד מהם יכולה להיות שייכת לחברה אחרת אנחנו רוצים להתחבר לנורת'ווינד ולכן אני אתיק את השם נורת'ווינד ואני אדביק אותו פה הדבר הבא שאנחנו רוצים לומר לקונקשן סטרינג זה בעצם הרשאות גישה עכשיו יש סך הכל שתי אפשרויות אם מסד הנתונים אין לו יוזרנם ופסוורד שאני צריך להתחבר אליו,
או יש לו יוזרנם ופסוורד. אם אין לו יוזרנם ופסוורד, אז אני יכול לציין את הדבר הבא: Trusted_Connection=True. זאת אומרת שמבחינתי ה-Connection הוא Trusted, אני יכול להתחבר אליו בלי יוזרנם ופסוורד, מה שקורה זה שיש לו אפשרות הגישה אליו דרך ה-Connection של Windows או דרך היוזרנם והפסוורד
של Windows. אפשרות אחרת, ואם יש למסד הנתונים יוזרנם ופסוורד, אז אני כמובן חייב לציין אותם בהתחברות עצמה בקונקשן סטרינג.
ולכן במקרה כזה מה שאני אעשה זה false, ואז אני אציין userid שווה לשם הuserid, לדוגמה הוא שיקו, פסוורד שווה לסיסמה עצמה של מסד הנתונים, לדוגמה 1234. אז כך נראה קונקשן סטרינג שמכיל יוזרנם ופסוורד, ואני כמובן הייתי חייב לציין אותו בקונקשן סטרינג.
בגלל שלנורת'ווינד אין כרגע יוזרנם ופסוורד, אבל אנחנו יכולים להחזיר את זה כרגע חזרה, להגדיר כאן true, ויש לנו קונקשן סטרינג שהיא מוכנה בכדי להתחבר לתוך מסד הנתונים sql server, ולהתחבר בדיוק למסד הנתונים נורת'ווינד.
כעת בואו נראה אם הקונקשן אכן עובד ומצליח להתחבר למסד הנתונים. אז דבר ראשון, מה שאנחנו צריכים להבין זה שזה שהרמנו כאן את האובייקט הזה וזה שהגדרנו לו Connection String זה רק הגדרות כרגע ועדיין ה-Connection לא יכול להעביר מידע מאתר האינטרנט שלנו אל מסד הנתונים וגם לא יכול להחזיר מידע.
הסיבה היא כי by default ה-Connection הוא סגור. מידע לא יכול לעבור על אותו קו שמקודם ראינו. ראינו פה שיש לנו קו מהאתר הזה לבין מסד הנתונים, קו מאתר האינטרנט לבין מסד הנתונים, אבל הקונקשן שמתאר לי את הקו, קודם כל הוא סגור, מידע לא יכול לעבור ולא יכול לחזור.
בשביל לאפשר את המידע שיעבור ויחזור, אני חייב להעביר את הקונקשן למצב פתוח, ואני עושה את זה על ידי הפונקציה "con.open". "con.open", כל מה שהיא עושה, זה מגדירה את הקונקשן כפתוח שכעת מידע יכול לעבור מהאתר שלנו למסד הנתונים, וכמובן גם להחזיר מידע בחזרה ממסד הנתונים אלינו ואנחנו כנראה נציג אותו.
בשביל לסגור את הקונקשן כל מה שאני מבצע וcon.close ומה שעשיתי בעצם עכשיו זה רק שתי שורות לבדיקה. פתחתי את הקונקשן ומיד סגרתי אותו רק בשביל לבדוק ששום שגיאה לא מתבצעת.
אם אין לי שום שגיאה אז אני כמובן אגיע לפקודה הבאה שבה אני רק אציג מידע על המסך response.write done אם אני מריץ כרגע את האתר ומבצע את הלחצן לוחץ עליו המערכת יוצרת לי אובייקט, מגדירה את כל ההגדרות לגבי איפה מסד הנתונים נמצא מבחינת הכישור, מנסה לפתוח את הכישור, אם הכל בסדר הכישור
מצליח להיפתח ואז אני סוגר אותו רק בשביל לבצע את הבדיקה שאין שום שגיאה ואחר כך אני אמור לראות דן על המסך. בואו נריץ את האתר, נלחץ על הלחצן ונראה דן, זאת אומרת שהכישור הצליח להיפתח והצליח להיסגר בלי שום בעיה.
אבל בואו נדמה שגיאה,