Presentation is loading. Please wait.

Presentation is loading. Please wait.

מסדי נתונים מסד נתונים הינו אוסף של טבלאות המכיל לפחות טבלה אחת. כל טבלה הינה אוסף של רשומות (לפחות רשומה בודדת) וכל רשומה מכילה אוסף של שדות ולבסוף.

Similar presentations


Presentation on theme: "מסדי נתונים מסד נתונים הינו אוסף של טבלאות המכיל לפחות טבלה אחת. כל טבלה הינה אוסף של רשומות (לפחות רשומה בודדת) וכל רשומה מכילה אוסף של שדות ולבסוף."— Presentation transcript:

1 מסדי נתונים מסד נתונים הינו אוסף של טבלאות המכיל לפחות טבלה אחת. כל טבלה הינה אוסף של רשומות (לפחות רשומה בודדת) וכל רשומה מכילה אוסף של שדות ולבסוף כל שדה מכיל אוסף של תווים מסוג מסוים (מספר, תו, בוליאני וכד'). ישנם מספר סוגי של מסדי נתונים בשוק כמו : אקסס, אורקל, sqlServer, DB2 (שלחברת IBM), sybase ,MySql וכד'. אנחנו נשתמש במסד הנתונים של Access !. ראשית, יש לפתוח מסד נתונים חדש. על מנת לעשות זאת, יש להפעיל את תוכנת ה- Access ולפתוח מסד נתונים חדש וריק ולשמור אותו בספריית App_Dataשל הפרויקט . מעתה והלאה אין צורך בתוכנת ה- Access עצמה ואת כל העבודה נבצע דרך קוד ה- aspx בלבד !!!

2 .NET ADO מהי טכנולוגית ADO.NET ?
מגדירה אוסף גדול של מחלקות, מבנים וממשקים המספקים גישה מתקדמת וגמישה לטיפול במידע. תוכנות ניהול מסד נתונים מאפשרת לבצע : שליפת נתונים , עריכה ,עדכון ומחיקה, אבטחה. מנהלות בעצמן את ארגון הקבצים, הרשאות הגישה, גיבויים, חוקיות ותקפות המידע וכו'.

3 סקירת המחלקות של ADO.Net
ישנם שתי קבוצות מחלקות: צרכני המידע ספקי המידע

4 אובייקטים מסוג ספקים אלו קבוצות האובייקטים הקשורים ספציפית לספק המידע שלנו. סוג האובייקט נקבע על ידי סוג מקור המידע שנעבוד איתו. דוגמא: אם מקור המידע שלנו היא SQL Server אזי נעבוד עם קבוצת אובייקטים שונה לזו שאם נעבוד עם מסד נתונים של Access * כדי לעבוד עם מקור מידע חדש, נצטרך לספק קבוצת מחלקות שפיזית יודעות לתקשר עם מקור המידע (שומר על גמישות ויכולות הרחבה)

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

6 מהי טכנולוגית ADO.NET ? לכל מסד נתונים יש שפה יחודית ותפיסת ניהול נתונים שונה. אובייקט ADO.NET מאפשר גישה אחידה לנתונים ללא קשר לסוג מסד נתונים בעזרת המתווך הנקרא Driver. Driver מאפשר להתחבר אל מסד נתונים כלשהו ולהעביר לו משפתי SQL אחידים ללא תלות בסוג מסד נתונים ADO.NET מספקת את התקשורת בין האפליקציה (תוכנית) ובסיס הנתונים , ומאפשרת להתחבר, לאחזר ולעדכן אותם. ADO.NET מציעה שתי גישות שונות למקורות המידע: Disconnected – שיטה הלא-מקושרת Full Connected – שיטה מקושרת רכיבי ADO.NET מכילים: רכיב גישה לנתונים Data provider רכיבים המאפשרים עבודה עם עותק הנתונים בזכרון היישום - DataSet

7 ADO.NET Data Providers בעבודה מול מסד הנתונים Access ניעזר במחלקות ה- Provider המוגדרות במרחב השמות : System.Data.OleDB . זאת משפחת טיפוסים מקשרת בין התוכנית לבין מסדי הנתונים.

8 ADO.NET Data Providers המחלקות המרכזיות :
Connection - אובייקט ממחלקה זו מנהל את ההתחברות למסד הנתונים. Command - אובייקט ממחלקה זו מגדיר את הפקודה הנשלחת למסד הנתונים לצורך שליפה או עדכון נתונים. DataReader - באמצעות אובייקט ממחלקה זו ניתן לבצע שליפה מהירה של נתונים . DataAdapter - באמצעות אובייקט ממחלקה זו נעלה את הנתונים לזיכרון ונעדכן את מסד הנתונים בסיום העיבוד כאשר נבחר במודל נתונים מנותק (Disconnected).

9 Oracle, Access, SqlServer, MySql וכו,
ADO.NET Data Providers כדי ליצור קשר עם מסד נתונים נוכל להשתמש ב- OleDbConnection המאפשר התקשרות עם מגוון מסדי נתונים כגון אקסס ו-MySql . משפחת ה- OleDB: , OleDbCommand, OleDbDataReader, OleDbDataAdapter באמצעות מחלקות אלו ניתן לגשת לכל מסדי הנתונים התומך ב- Oledb: Oracle, Access, SqlServer, MySql וכו, יתרון : עבודה מול כל מסדי הנתונים. המחיר : ביצועים פחותים. מחלקות אלו מוגדרות במרחב השמות System.Data.OleDb .

10 ADO.NET מרחבי השמות Namespace
המספק אוסף של מחלקות, מבנים ממשקים לעבודה מול כל מסד נתונים התומך ב- OleDb על מנת להשתמש ב מרחבי השמות אלה , צריך להוסיף פקודות: בצד השרת( בקובץ aspx.cs): using System.Data using System.Data.OleDb או בצד הלקוח (בקובץ (aspx: Page Language="C#" debug="true"%> Import Namespace=“System.Data” %> Import Namespace=“System.Data. OleDb” %>

11 תרשים הקבצים של אתר לדוגמה

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

13 חיבור מאגר נתונים לתוכנית

14

15 התחברות למקור נתונים האובייקט Connection
מגדיר ומנהל את הקישור למסד הנתונים. אובייקט ה- Connection מגדיר "על מי מבצעים את הפעולות". הוא עושה זאת באמצעות מחרוזת המגדירה את מקור הנתונים , המחרוזת נקראת מחרוזת ההתחברות (Connection String). האובייקטים ביישום אינם יכולים לגשת עצמאית למסד הנתונים אלא רק על ידי שימוש באובייקט Connection . נבחר את מחלקת ה- Connection המתאימה על פי מסד הנתונים אליו רוצים להתחבר : OleDbConnection .

16 התחברות למקור נתונים המחלקה OleDbConnection
המחלקה מכילה מאפיין חשוב אחד : - OleDbConnection.ConnectionString מחרוזת זו מגדירה פרמטרים שונים וחיוניים להתחברות למסד הנתונים כגון: סוג מסד הנתונים , שם מסד הנתונים , שם משתמש וסיסמה , כתובת IP של שרת המידע ועוד. המחלקה זו מכילה שתי מתודות עיקריות : OleDbConnection.Open() פתיחת קישוריות למסד הנתונים. OleDbConnection.Close() ניתוק התוכנית ממסד הנתונים בסיום העבודה . המחלקה OleDbConnection מכילה 2 בנאים : בנאי ברירת מחדל public OleDbConnection() בנאי אשר מקבל את מחרוזת הקישור לבסיס הנתונים. public OleDbConnection(String ConnectionString)

17

18 הגדרת השרת בו נמצא מסד הנתונים, במקרה זה על המחשב המקומי
התחברות למקור נתונים המחלקה OleDbConnection מבנה מחרוזת ההתחברות: string dbPath = string connStr Source='" + dbPath +"'; Provider='Microsoft.Jet.OLEDB.4.0';"; דוגמת שימוש : OleDbConnection myConnection=new OleDbConnection(connStr ); שם מסד הנתונים הגדרת השרת בו נמצא מסד הנתונים, במקרה זה על המחשב המקומי

19 התחברות למקור נתונים המחלקה OleDbConnection
OleDbConnection myConnection=new OleDbConnection(); 2. הגדרת ה- ConnectionString בכדי לקבוע למי להתחבר: string dbPath = string connStr Source='" + dbPath + "'; Provider= 'Microsoft.Jet.OLEDB.4.0'; Integrated Security = True;"; 3. פתיחת קשר: myConnection.Open(); 4. סגירת הקשר בסיום השימוש על מנת לשחרר את המשאבים: myConnection.Close(); הערה - לפני מחרוזת הקישור מציין שאין להתייחס ל Esacpe sequence שבו. Esacpe sequence - אילו תווים מיוחדים שיש להם משמעות מיוחדת . לדוגמא 'n \'- שורה חדשה 't \'- Tab .

20

21

22

23 אובייקט myConnection הוא אובייקט קישור בלבד
חשוב לזכור !!!! אובייקט myConnection הוא אובייקט קישור בלבד ולכן לא נוכל דרכו לבצע פעולות על הנתונים אז מה עושים?????

24 התחברות למקור נתונים Command
אובייקט מאפשר ביצוע פעולה על מסד נתונים שהוגדר בקישור Connection string NonQueryString = String.Format("insert into tblMember values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}');", struser, strfname, strlname, str , strpass, strgender, strhome, strage); OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(NonQueryString, con); פתיחת קישור: conn.Open(); ביצוע פעולת עדכון, הוספה, עריכה, מחיקה שהוגדרה על מסד הפיזי: cmd.ExecuteNonQuery(); סגירת התחברות: conn.Close();

25 קובץ Registration.Aspx.cs
protected void Page_Load(object sender, EventArgs e) { קליטת הנתונים מהטופס : string struser = Request.Form["userName"].ToString(); string strfname = Request.Form["fname"].ToString(); string strlname = Request.Form["lname"].ToString(); string str = Request.Form[" "].ToString(); string strpass = Request.Form["password"].ToString(); string strgender = Request.Form["gender"].ToString(); string strhome = Request.Form["home"].ToString(); string strage = Request.Form["age"].ToString(); הגדרת המשפט ההתחברות: string dbPath string connectionString Source='" + dbPath + "'; Provider = 'Microsoft.Jet.OLEDB.4.0';"; יצירת קשר עם מסד נתונים: System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(connectionString); הוספת נתונים לטבלה: string NonQueryString = String.Format("insert into tblMember values('{0}','{1}','{2}','{3} ','{4}','{5}','{6}','{7}');", struser, strfname, strlname, str , strpass, strgender, strhome, strage); System.Data.OleDb.OleDbCommand cmd = new יצירת האובייקט לביצוע שאילתא: System.Data.OleDb.OleDbCommand(NonQueryString, con); פתיחת ההתקשרות: con.Open(); הפעלת השאילתא: cmd.ExecuteNonQuery(); סגירת ההתקשרות: con.Close(); }

26 טיפול במידע – Disconnected
צורת עבודה זו מול מסד הנתונים מכונה Disconnected environment (מערכות מנותקות) והיא ברירת המחדל בעבודה עם ADO.NET . תהליך העבודה: במערכות מנותקות טוענים מה- Database לזיכרון המחשב את המידע הדרוש לתוכנית לצורך עיבוד התוכנית ומתנתקים. כל העיבוד מתבצע על זיכרון המחשב, בסיום העיבוד מתחברים חזרה ל- Database שומרים את המידע המעובד ב- Database ומתנתקים.

27 טיפול במידע – Disconnected
DataSet הוא מטמון (cache) של נתונים שחלקם נשלפו ממסד הנתונים לצורך עבודה בצורה מנותקת. מבנה זהה למבנה מסד הנתונים: DataSet ל- אוסף טבלאות (DataTable) והקשרים ביניהם. ל- DataSet אין יכולת לגשת למסד הנתונים בעצמו, לכך קיימת המחלקה DataAdapter . DataAdapter מאפשר עבודה נוחה וקלה עם ה DataSet מול מסד הנתונים.

28 טיפול במידע – Disconnected
מחלקות ה- Data Cache Constraints DataConstraints Columns DataColumn DataSet Tables DataTable Object Collection Relations DataRelation Rows DataRow PrimaryKey אלו הן המחלקות אשר מכילות ומנהלות את המידע בזיכרון המחשב:

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

30 טיפול במידע – Disconnected
מבנה המחלקה DataSet המחלקה המרכזית של הארכיטקטורה המנותקת ב-ADO.NET. ה- DataSet מכיל אוסף של אובייקטים מהמחלקה DataTable. אובייקט מסוג DataTable מייצג טבלה אחת מיוצגת ע"י אוספים: DataRow * DataColumn * . ה-DataSet מכיל אוסף של אובייקטים מהמחלקה DataRelation. אובייקט מסוג DataRelation מייצג ומנהל את הקשרים בין המחלקות. תפקידו לייצג נתונים, אולם אין הוא יכול לגשת למסדי הנתונים בעצמו על מנת לקרוא או לעדכן נתונים. על מנת לקרוא נתונים או לעדכן את מסד הנתונים DataSet נעזר באובייקט מהמחלקה DataAdapter . DataSet Tables Relations

31 טיפול במידע – Disconnected
המחלקה DataTable כמו טבלה במסדי הנתונים, האובייקט מהמחלקה DataTable המייצג טבלה ב- DataSet בנוי מאוסף של שדות המגדיר את מבנה הטבלה , אוסף של אילוצים על השדות, אוסף של רשומות המכילות את המידע ומפתח ראשי אשר יכול להכיל יותר מאשר שדה אחד.

32 טיפול במידע – Disconnected
המחלקה DataTable האוסף Columns הוא אוסף של אובייקטים מהמחלקה DataColumn. המחלקה DataColumn מתארת שדה בודד בטבלה. האוסף Columns מתאר את מבנה (Schema) הטבלה. האוסף Rows הוא אוסף של אובייקטים מהמחלקה DataRow . המחלקה DataRow מייצגת רשומה בודדה. המערך PrimaryKey מכיל ייחוסים לשדות המוגדרים במפתח.

33 טיפול במידע – Disconnected
בניית DataSet DataSet מוגדר באופן אוטומטי על ידי אובייקט מהמחלקה OleDbDataAdapter . DataTable מגדיר את מבנה הטבלה (DataTable.Columns). על בסיס מבנה הטבלה ניתן להגדיר את הרשומות (DataTable.Rows). שלבי הבנייה : הקצאת DataSet. הקצאת DataTable וחיבורו ל- DataSet. הגדרת מבנה הטבלה (Columns) ומפתח לטבלה. הוספת רשומות (DataRow). סדר הבנייה יכול להיות שונה , אולם לא ניתן להגדיר DataRow לפני שבניית ה- Columns הושלמה.

34 טיפול במידע – Disconnected
בניית DataSet הגדרת מבנה הטבלה (Columns) הגדרת השדה הראשון DataColumn col1 = new DataColumn(); col1.ColumnName = "CityId"; col1.DataType = typeof(System.Int32); col1.Unique = true; DataColumn col2 = new DataColumn(); col2.ColumnName = "CityName"; col2.DataType = typeof(System.String); col2.Unique = true; col2.MaxLength = 25; הגדרת השדה השני

35 טיפול במידע – Disconnected
בניית DataSet הגדרת מבנה הטבלה (Columns) הקצאת הטבלה DataTable tblCities = new DataTable("Cities"); tblCities.Columns.Add(col1); tblCities.Columns.Add(col2); DataColumn[] arr = new DataColumn[1]; arr[0] = tblCities.Columns["CityId"]; הוספת הרשומות לאוסף Columns הגדרת המפתח לטבלה

36 טיפול במידע – Disconnected
עיבוד המידע בזיכרון עיבוד המידע מתבצע על אובייקט מהמחלקה DataSet אשר נוצר על ידי ה- DataAdapter, בזמן בעיבוד התוכנית מנותקת מה- DataBase. בשלבי העיבוד השונים נבצע את הפעולות הבאות: הצגת נתונים – הצגת המידע הקיים ברשומות הקיימות. שינוי נתונים – שינוי נתונים הקיימים ברשומות הקיימות. הוספת נתונים – הוספת רשומות חדשות. מחיקת נתונים – מחיקת רשומה קיימת. פעולות אלו מתבצעות בזיכרון ולכן ה- Database אינו מתעדכן בהם.

37 טיפול במידע – Disconnected
עיבוד המידע בזיכרון הצגת הנתונים: הנתונים כולם נמצאים בתוך האוסף Tables . ניתן לגשת לטבלה הרצויה באמצעות שמה או על פי מקומה באוסף: לדוגמה: string str = ds.Tables[“Persons”].Rows[0][“LastName”].ToString(); או : string str = ds.Tables[0].Rows[0][1].ToString(); כנ"ל לשדות השונים. מספר רשומה שם רשומה

38 טיפול במידע – Disconnected
עיבוד המידע בזיכרון הצגת הנתונים: לעיתים נרצה לבחור את הנתונים אותם נרצה להציג. ניתן לבחור את הנתונים על ידי המתודה : DataTable.Select(…) לדוגמה: DataRow[] arr = ds.Tables[“Persons”].Select(“CityId = 12”); foreach(DataRow dr in arr) Console.WriteLine(dr[“LasntName”].ToString()); המתודה Select מחזירה את כל הרשומות אשר עונים על התנאי.

39 טיפול במידע – Disconnected
עיבוד המידע בזיכרון שינוי הנתונים: לדוגמה: ds.Tables[“Persons”].Rows[0][“LastName”] = “Cohen”; או : ds.Tables[0].Rows[0][1] = “Cohen”;

40 טיפול במידע – Disconnected
עיבוד המידע בזיכרון הוספת נתונים חדשים: הקצאת רשומה חדשה : DataRow dr = ds.Tables["Persons"].NewRow(); הוספת הנתונים לרשומה החדשה: dr["LastName"] = "Sonya"; dr["FirstName"] = "IsTheBest"; הוספת הרשומה החדשה לאוסף Rows : ds.Tables["Persons"].Rows.Add(dr);

41 טיפול במידע – Disconnected
עיבוד המידע בזיכרון מחיקת רשומות: איתור הרשומה המיועדת למחיקה: DataRow[] arr=ds.Tables["Persons"].Select("LastName = 'Sonya’ ”); סימון הרשומה כמיועדת למחיקה (לא מחיקה פיזית) arr[0].Delete();

42 טיפול במידע – Disconnected
המחלקה OleDbDataAdapter מהווה גשר בין בסיס הנתונים ל- DataSet. באובייקט מסוג DataSet נמצא עותק הנתונים מהטבלה הנמצאת במסד נתונים public DataSet ds = new DataSet(); DataAdapter –מאפשר לבצע את הפעולה שהוגדרה ב-Command על מסד נתונים הפיזי, לבנות עותק של נתונים בצד היישום ולעדכן את מסד נתונים הפיזי בהתאם לשינויים שנערכו עליו. OleDbDataAdapter adapter = new OleDbDataAdapter(selectQuery, conn); adapter.Fill(ds, "dbUsers"); conn.Close(); DataAdapter מגדיר את כל ארבעת פקודות ה-SQL הבסיסיות: select, insert, update, delete. DataAdapter הוא בעלת תפקיד כפול: לבנות את אובייקט ה- DataSet אשר יכיל את המידע הנדרש בזיכרון התוכנית. עדכון את מסד הנתונים בסיום העיבוד.

43 טיפול במידע – Disconnected
המחלקה OleDbDataAdapter מגדירה שתי מתודות מרכזיות : SqlDataAdapter.Fill( … ) תפקיד מתודה זו לקרוא מידע ממסד הנתונים ולייצר את אובייקט ה- DataSet של התוכנית, מתודה זו מופעלת בתחילת העיבוד. SqlDataAdapter.Update( … ) תפקיד מתודה זו לשמור בסיום העיבוד את התוצאות ואו השינויים במסד הנתונים, מופעלת בסוף העיבוד.

44 טיפול במידע – Disconnected
המחלקה OleDbDataAdapter ייבוא נתונים מבסיס הנתונים ל – DataSet ייעשה באמצעות המתודה DataAdapter.Fill(): הפרמטר הראשון – DataSetName הוא שם ה- DataSet אליו אנו מעבירים את הנתונים. הפרמטר השני – TableName הוא שם הטבלה שתיווצר ב- DataSet. המתודה מבצעת כמה פעולות לפי הסדר הבא: פתיחת קשר. הרצת פקודת ה – Select של ה – DataAdapter. בניית טבלה ב – DS שתכיל את הנתונים שנתקבלו מהשאילתא (שם הטבלה יהיה TableName(פרמטר שני). סגירת קשר. DataAdapterName.Fill(DataSetName,”TableName”) או DataAdapterName.Fill(DataSetName)

45 טיפול במידע – Disconnected
המחלקה OleDbDataAdapter דוגמה: OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = MyConnectionString; DataSet ds = new DataSet(); OleDbCommand command = new OleDbCommand(); command.Connection = cn; command.CommandText = "SELECT au_lname,au_fname,phone FROM authors"; OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.SelectCommand = command; try { adapter.Fill(ds, "Authors"); } catch (Exception exc) { . . }

46 טיפול במידע – Disconnected
המחלקה OleDbDataAdapter הערה: המתודה OleDbAdapter.Fill(...) יודעת לפתוח בעצמה את ה- Connection במידה והוא סגור, ולסגור אותו בעצמה לאחר קריאת הנתונים ממסד הנתונים. כאשר היא מקבלת Connection פתוח היא אינה סוגרת אותו בעצמה. במידה וקוראים טבלה אחת, אין צורך לפתוח Connection ואין צורך לסגור אותו. במידה וקוראים שתי טבלאות או יותר יש לפתוח Connection ולסגור אותו בסיום הקריאה, הסגירה תתבצע בבלוק finally . לדוגמה: try { cn.Open(); adapter1.Fill(ds, “Persons"); adapter2.Fill(ds,”Cities”); } catch (Exception exc) { . . } Finally { cn.Close() }

47 טיפול במידע – Disconnected
המחלקה OleDbDataAdapter עדכון נתונים מה-DataSet למסד הנתונים ייעשה באמצעות המתודה OleDbDataAdapter.Update(): DataAdapterName.Update(DataSetName,”TableName”) הפרמטר הראשון – DataSetName הוא שם ה- DataSet ממנו מעדכנים נתונים. הפרמטר השני – TableName הוא שם טבלת מקור הנתונים ב-DataSet. המתודה מבצעת כמה פעולות לפי הסדר הבא: פתיחת קשר. הרצת פקודת העדכון המתאימה ע"פ השינויים שחלו ב- DataSet (insert or Update or Delete) . סגירת קשר.

48 טיפול במידע – Disconnected
המחלקה OleDbDataAdapter שלב א – בניית ה- DataSet התחברות ל- Database , קריאת המידע הנדרש והעתקתו לזיכרון והתנתקות מה- Database . פעולות אלו הן באחריותה של המחלקה DataAdapter . public DataSet ds = new DataSet(); שלב ב - העיבוד עיבוד המידע מתבצע על אובייקט מהמחלקה DataSet אשר נוצר על ידי ה- DataAdapter, בזמן בעיבוד התוכנית מנותקת מה- DataBase. שלב ג – עדכון מסד הנתונים בסיום העיבוד התחברות נוספת ל- Database ועדכון על ידי האובייקט DataAdapter .

49 טיפול במידע - Disconnected
המחלקה OleDbCommandBuilder המחלקה OleDbDataAdapter מכילה ארבעה אובייקטים מהמחלקה OleDbCommand . לפני קריאת מידע מטבלה יש להגדיר את האובייקט OleDbDataAdapter.SelectCommand . לפני עידכון המידע יש להגדיר את שאר ה- Command’s , או לפחות את אלו אשר "ישתתפו במשחק". ניתן להגדירם ידנית, או להשתמש במחלקה שזהו יעודה : OleDbCommandBuilder . OleDbCommandBuilder יודעת להגדיר פקודות INSERT, UPDATE, DELETE בהסתמך על פקודת SELECT כפי שהיא מוגדרת ב- OleDbDataAdapter.SelectCommand

50 טיפול במידע – Disconnected
המחלקה OleDbCommandBuilder דוגמה: יצירת ה- CommandBuilder OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); adapter.UpdateCommand = builder.GetUpdateCommand(); adapter.InsertCommand = builder.GetInsertCommand(); adapter.DeleteCommand = builder.GetDeleteCommand(); try { adapter.Update(ds, "Persons"); } catch (Exception e) { Console.WriteLine(e.Message); יצירת שאילתות העידכון

51 טיפול במידע – Disconnected
DataView DataView מאפשר להציג את המידע שבטבלה בצורות שונות. מאפשר לבצע מיון וסינון (על פי שדות או RowState) . מכל טבלה ניתן לייצר מספר DataViews , כל DataView נוצר מטבלה אחת בודדה. DataView dataView = new DataView(dataSet.Tables["UserTransactions"], , "UserID=' '“ ,"TransactionDate“ ,DataViewRowState.CurrentRows); שם הטבלה קריטריון שליפה מצב שורות שדה מיון

52 טיפול במידע – Disconnected
DataView דוגמאות נוספות: 1 - 2 - DataView view = new DataView(m_DataSet.Tables["Persons"]); view.RowFilter = "CityID = 1"; dataGrid1.DataSource = view; DataView view = new DataView(m_DataSet.Tables["Persons"]); view.RowFilter = "CityID = 1"; view.Sort = "LastName DESC"; dataGrid1.DataSource = view;

53 טיפול במידע – Disconnected
DataView דוגמאות נוספות: ניתן למיין על-פי מספר שדות על ידי רישום השדות מופרדים על-ידי פסיק. ניתן לקבוע עבור כל שדה אם ימוין בסדר עולהASC" (ascending) " או יורד "DESC" (descending) (ברירת מחדל : סדר עולה) string sortField = " TransactionDate "; DataView dataView = new DataView(dataSet.Tables["UserTransactions"]); view.RowFilter = “UserID=' ‘ "; dataView1.Sort = sortField;

54 טיפול במידע – Full Connected
הגישה של יישום מבוסס מערכת מידע יכול להיות מבוסס על חיבור קבוע בין התוכנית לבין מסד הנתונים, או חיבור מזדמן בין התוכנית לבין מסד הנתונים. חיבור קבוע בין היישום למסד הנתונים נקרא Full Connection . חיבור מזדמן בין היישום לבין מסד הנתונים מכונה Disconnected או Connectless . פרק זה עוסק בחיבור קבוע למסד הנתונים. הפרק הבא יעסוק בחיבור מזדמן למסד הנתונים.

55 טיפול במידע – Full Connected
המחלקה OleDbCommand תפקיד אובייקט ממחלקה זו להריץ פקודה על מסד הנתונים. הפקודה הינה שאילתא ( Query) שרוצים להריץ על מסד הנתונים. הפקודה יכולה להיות פקודה פשוטה ובסיסית : "SELECT * FROM MyTable” או פקודה מורכבת ומסועפת: "SELECT MyTable1.*, MyTable2.* FROM MyTable1 INNER JOIN field1 ON MyTable1.field1 = MyTable2.field1”

56 טיפול במידע – Full Connected
המחלקה OleDbCommand המחלקה OleDbConnection קובעת על מי לבצע את הפעולות, המחלקה OleDbCommand קובעת מה לבצע. לכן הן חייבות לעבוד יחד על מנת לגשת למסד הנתונים. מסד נתונים OleDbConnection OleDbCommand

57 טיפול במידע – Full Connected
המחלקה OleDbCommand יצירת אובייקט Command : אובייקט Command חייב להכיל שני פרמטרים חשובים: אובייקט Connection המנהל עבורו את ההתחברות למסד הנתונים. שאילתא הקובעת מה יתבצע על מסד הנתונים. המידע יכול להתקבל באובייקט באמצעות הבנאים, או לאחר יצירת האובייקט באמצעות המאפיינים. לדוגמה: string str = “SELECT * FROM MyTable” ; OleDbConnection cn = new OleDbConnection (...); OleDbCommand cmd = new OleDbCommand (str,cn); או: OleDbCommand cmd = new OleDbCommand (str,cn); cmd.CommandText = str; cmd.Connection = cn;

58 טיפול במידע – Full Connected
המחלקה OleDbCommand המחלקה מכילה מספר מאפיינים חשובים: OleDbCommand.Connection : ייחוס למחלקת ה- Connection , אובייקט ה- Command קובע מה לבקש, אובייקט ה- Connection קובע היכן לבקש . OleDbCommand.CommandText : הבקשה - גוף השאילתא או הפרוצדורה.

59 טיפול במידע – Full Connected
המחלקה OleDbCommand המחלקה מכילה מספר מתודות עיקריות : OleDbCommand.ExecuteReader() : מתודה זו מריצה שאילתא אשר מצפה לאוסף רשומות (Result Set ). OleDbCommand.ExecuteNonQuery() : שאילתות עדכון מבנה ה –Database ושאילתות עדכון ,מחיקה והוספת רשומות. OleDbCommand.ExecuteScalar(): הרצת שאילתא השולפת נתון בודד ממסד הנתונים כגון : Count, Sum, Average, Date וכו'

60 טיפול במידע – Full Connected
המחלקה OleDbDataReader המחלקה OleDbDataReader מאפשרת קריאת רשומות ממסד הנתונים. באמצעות אובייקט מהמחלקה ניתן לבצע קריאה בלבד, הגישה היא סדרתית (מהראשון לאחרון) בלבד, כתוצאה מכך קריאת המידע היא מהירה מאוד. ניתן לעבוד עם אובייקט ממחלקה זו רק ב- Full Connected , המשמעות, כל עוד האובייקט קורא את המידע, הקשר למסד הנתונים חייב להיות פתוח. בסיום הקריאה חובה לסגור את הקשר למסד הנתונים. OleDbConnection DB OleDbDataReader OleDbCommand

61 טיפול במידע – Full Connected
המחלקה OleDbDataReader הגדרת DataReader מתבצעת בשלושה צעדים: הגדרת Connection : OledbConnection myConn= new OledbConnection(); string dbPath = string Source='" +dbPath+ "'; Provider='Microsoft.Jet.OLEDB.4.0';Integrated Security=True;"; 2. הגדרת Command : string strSql = "select * from UsersTbl"; OleDbCommand myCmd=new OleDbCommand(strSql,myConn); הגדרת DataReader : OleDbDataReader dr=cmd.ExecuteReader();

62 טיפול במידע – Full Connected
המחלקה OleDbDataReader אובייקט מהמחלקה OleDbDataReader נוצר על ידי האובייקט Command : OleDbDataReader dr=cmd.ExecuteReader(); התהליך : אובייקט ה- Command מריץ את השאילתא על מסד הנתונים שמגדיר אובייקט ה- Connection . תוצאת השאילתא נקראת Result Set והיא נשמרת בזיכרון מסד הנתונים, את הרשומות הנמצאות בזיכרון מסד הנתונים צריך להעביר לתוכנית, זה התפקיד של DataReader . לאחר הרצת השאילתא ובניית ה- Result Set מתפנה האובייקט Command להקצות ולהגדיר את אובייקט ה- DataReader .

63 טיפול במידע – Full Connected
המחלקה OleDbDataReader קריאת הנתונים: האובייקט DataReader קורא את תוצאת השאילתא באמצעות המתודה OleDbDataReader.Read() . כל קריאה למתודה מחזירה רשומה אחת. כאשר לא נשארו רשומות לקריאה המתודה מחזירה false . לאורך כל תהליך הקריאה ה- Connection חייב להיות פתוח. בסיום תהליך הקריאה חובה לסגור את ה- Connection . כל התהליך יתבצע בתוך בלוק try .

64 טיפול במידע – Full Connected
המחלקה OleDbDataReader דוגמה: OleDbConnection myConnection=new OleDbConnection(connectionString); string strSql = "select * from usersTbl"; OleDbCommand myCmd = new OleDbCommand(strSql,myConnection); string output="Users Table \n" ; try { myConnection.Open(); OleDbDataReader dataReader = myCmd.ExecuteReader(); הרצת השאילתא והקצאת ה- DataReader . המשך בדף הבא

65 טיפול במידע – Full Connected
המחלקה OleDbDataReader דוגמה – המשך: while (dataReader.Read()) { output += dataReader[“UserID”].ToString(); output += "\t" + dataReader[“LastName”].ToString(); output += "\t" + dataReader[“FirstName”].ToString(); output += "\t" + dataReader[“Address”].ToString(); output += "\t" + dataReader [“Age”].ToString()+"\n" ; } Console.WriteLine(output); catch(OleDbException e) { } Finally { dataReader.Close(); myConnection.Close(); } גישה למסד הנתונים וקריאת ה- Result Set

66 טיפול במידע – Full Connected
המחלקה OleDbDataReader סיכום פעולות שיש לבצע בשימוש ב DataReader יצירת קישור למסד הנתונים על-ידי שימוש ב-OleDbConnection. פתיחת הקישור למסד הנתונים על-ידי שימוש במתודה Open. הגדרת שאילתה ב- Command. יצירת DataReader מאובייקט ה Command על-ידי שימוש במתודה ExecuteReader. שימוש במתודות Read (לקריאת כל רשומה) ו Get (לכל שדה ברשומה) של ה DataReader. הצגת הנתונים על-ידי שימוש בלולאה. סגירת ה DataReader וה- Connection.

67 טיפול במידע – Full Connected
הוספת רשומה באמצעות המחלקה OleDbCommand ניתן גם להוסיף רשומות לטבלה במסד הנתונים. OleDbConnection myConnection=new OleDbConnection(connectionString); string strSql = "INSERT INTO UsersTbl (UserID,FirstName,LastName,UserName,UserPassword) VALUES (' ','Ron','Shay','RonS','1234')"; OleDbCommand myCmd = new OleDbCommand(strSql,myConnection); try { myConnection.Open(); myCmd.ExecuteNonQuery(); Console.WriteLine("Insert succeed"); } catch(OleDblException ex) { } finally { myConnection.Close(); } הרצת שאילתת הוספה

68 טיפול במידע – Full Connected
עדכון רשומה קיימת באמצעות המחלקה OleDbCommand ניתן גם לעדכן רשומה במסד הנתונים. OleDbConnection myConnection=new OleDbDbConnection(connectionString); string strSql = "UPDATE authors SET authors.au_fname = 'Annie' WHERE au_fname = 'Anne‘”; OleDbCommand myCmd = new OleDbCommand(strSql,myConnection); try { myConnection.Open(); myCmd.ExecuteNonQuery(); Console.WriteLine("Insert succeed"); } catch(SqlException ex) { } finally { myConnection.Close(); } הרצת שאילתת עידכון

69 טיפול במידע – Full Connected
מחיקת רשומה באמצעות המחלקה OleDbCommand ניתן גם לעדכן רשומה במסד הנתונים. OleDbConnection myConnection=new OleDbConnection(connectionString); string strSql = "DELETE FROM authors WHERE au_lname = 'McBadden' “; OleDbCommand myCmd = new OleDbCommand(strSql,myConnection); try { myConnection.Open(); myCmd.ExecuteNonQuery(); Console.WriteLine("Insert succeed"); } catch(SqlException ex) { } finally { myConnection.Close(); }

70 טיפול במידע – Full Connected
קריאת שדה בודד שליפת נתון בודד ממסד הנתונים . המתודה מחזירה אובייקט מטיפוס Object שצריך לעבור המרה (Casting) בהתאם. OleDbConnection myConnection=new OleDbConnection(connectionString); string strSql = "SELECT COUNT(*) FROM UsersTbl “; OleDbCommand myCmd = newOleDbCommand(strSql,myConnection); myConnection.Open(); string strName = (string)myCmd.ExecuteScalar(); Console.WriteLine("Found : {0}",strName); myConnection.Close();

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


Download ppt "מסדי נתונים מסד נתונים הינו אוסף של טבלאות המכיל לפחות טבלה אחת. כל טבלה הינה אוסף של רשומות (לפחות רשומה בודדת) וכל רשומה מכילה אוסף של שדות ולבסוף."

Similar presentations


Ads by Google