810 likes | 1.05k Views
ADO.NET. Agenda. ADO.NET, Why ? What Is ADO.NET ? Disconnected Scenario. Disconnected Scenario – Data Providers . Disconnected Scenario – Data Cache . Disconnected Scenario – Working With DB. Data Relations. DataView. Connected Scenario. Agenda. ADO.NET Why? What Is ADO.NET?
E N D
Agenda • ADO.NET, Why ? • What Is ADO.NET ? • Disconnected Scenario. • Disconnected Scenario – Data Providers. • Disconnected Scenario – Data Cache. • Disconnected Scenario – Working With DB. • Data Relations. • DataView. • Connected Scenario.
Agenda • ADO.NET Why? • What Is ADO.NET? • Disconnected Scenario. • Disconnected Scenario – Data Providers. • Disconnected Scenario – Data Cache. • Disconnected Scenario – Working With DB. • Data Relations. • DataView. • Connected Scenario.
ADO.NET, Why? • אפליקציות מודרניות עושות שימוש בהרבה מאוד מידע. • המידע יכול להגיע מ- Database (אחד או יותר), מהאינטרנט (קבצי XML) וכו'. • ניתן לעבוד ישירות מול ה- Database , אולם זו עבודה מורכבת וקשה. • ולכן ,לאורך השנים, פותחו טכנולוגיות שונות המקלות על העבודה מול Databases .
ADO.NET, Why? טכנולוגיות לעבודה מול DB - אבולוציה
ADO.NET, Why? המטרה של כל הטכנולוגיות הללו היתה : • לפשט את הטיפול במערכות מבוססות מידע. • להפוך את המערכות הללו לקלות יותר ליישום. • פשוטות יותר לתחזוקה. • וזולות יותר.
ADO.NET, Why? • ADO.NET הינה הטכנולוגיה האחרונה באבולוציה זו. • מותאמת לדרישות מודרניות ולארכיטקטורה מודרנית של טיפול במספר רב של מערכות מידע דרך ה- Web .
Agenda • ADO.NET Why? • What Is ADO.NET? • Disconnected Scenario. • Disconnected Scenario – Data Providers. • Disconnected Scenario – Data Cache. • Disconnected Scenario – Working With DB. • Data Relations. • DataView. • Connected Scenario.
What Is ADO.NET? • טכנולוגיה לטיפול ב- Database ובקבצי XML . • אוסף של מחלקות, מבנים, ממשקים המספקים גישה מתקדמת וגמישה לטיפול במידע. • טכנולוגיה העונה על צרכים מודרניים. • מתוכננת לעבוד במודל המכונה Disconnected environments • מסוגלת לעבוד גם במודל הנקרא Connected environments • תמיכה מלאה ב- XML .
What Is ADO.NET? מרחבי השמות System.Data ה- Root Namespace של עבודה עם ADO.NET . System.Data.SqlClient מרחב שמות המספק אוסף של מחלקות, מבנים ממשקים לעבודה מול SqlServer 2000 . System.Data.OleDb מרחב שמות המספק אוסף של מחלקות, מבנים ממשקים לעבודה מול כל מסד נתונים התומך ב- OleDb .
Agenda • ADO.NET Why? • What Is ADO.NET? • Disconnected Scenario. • Disconnected Scenario – Data Providers. • Disconnected Scenario – Data Cache. • Disconnected Scenario – Working With DB. • Data Relations. • DataView. • Connected Scenario.
Disconnected Scenario • הטיפול במערכות מידע יכול להיות מבוסס על חיבור קבוע בין התוכנית לבין ה- Database , או חיבור מזדמן בין התוכנית לבין ה- Database . • בפרק זה עוסק בחיבור מזדמן ל- Database . • צורת עבודה זו מול Database מכונה Disconnected environment(מערכות מנותקות) והיא ברירת המחדל בעבודה עם ADO.NET .
Disconnected Scenario במערכות מנותקות טוענים מה- Database לזיכרון המחשב את המידע הדרוש לתוכנית לצורך עיבוד התוכנית ומתנתקים, כל העיבוד מתבצע על זיכרון המחשב, בסיום העיבוד מתחברים חזרה ל- Database שומרים את המידע המעובד ב- Database ומתנתקים.
Disconnected Scenario יתרונות • ניתן בקלות להעביר יחידות מידע ממחשב לקוח אחד לשני. • אין תלות בנגישותו של מקור המידע. • משפר את הגמישות של התוכנית. • משפר את הביצועים של התוכנית. חסרונות • לא תמיד עובדים עם המידע העדכני ביותר. • צריך לטפל בקונפליקטים המתרחשים בין לקוחות שונים המטפלים באותו המידע.
Disconnected Scenario המחלקות: בתהליך העבודה עם Database נעבוד עם מספר מחלקות. את כל המחלקות ניתן לשייך לאחת משתי המשפחות הבאות: ProvidersData , Data Cache . מחלקות ה- Data Providers : תפקידם להגדיר ולנהל את הקשר בין התוכנית ל- Database . מחלקות ה- Data Cache : תפקידם להגדיר ולנהל את המידע כל עוד הוא שוכן בזיכרון.
Agenda • ADO.NET Why? • What Is ADO.NET? • Disconnected Scenario. • Disconnected Scenario – Data Providers. • Disconnected Scenario – Data Cache. • Disconnected Scenario – Working With DB. • Data Relations. • DataView. • Connected Scenario.
Disconnected Scenario – Data Providers תפקידם להגדיר ולנהל את הקשר בין התוכנית ל- Database. במשפחה זו, בין השאר, נמצא את המחלקות המרכזיות הבאות: XxxConnection XxxCommand XxxDataAdapter
Disconnected Scenario – Data Providers מחלקות ה- Data Providers, תפקידים : XxxConnection - ניהול ההתחברות ל- Database . XxxCommand - הבקשה למידע, הרצת שאילתא (Query), או פרוצדורה מאוחסנת (Stored Procedure) על ה- Database . XxxDataAdapter – בניית ה- Cache על פי השאילתא המוגדרת באובייקט ה- Command , השאילתא רצה על ה- Database שמוגדר באובייקט ה- Connection .
Disconnected Scenario – Data Providers מחלקות ה- Data Providers : מה משמעות ה- Xxx ? • Microsoft יצרו מספר מחלקות Connection , מספר מחלקות Command ומספר מחלקות DataAdapter . • המטרה היא לעבוד Native מול ה- Database . • למספר סוגים של Database יש מחלקות Connection ,Command ו- DataAdapter המיועדים לעבודה רק איתם, מחלקות אלו עברו אופטימיזציה לעבודה עם Database מסוג מוגדר. • עבודה Native משפרת את הביצועים בעבודה מול ה- Database . • לכל משפחות המחלקות ממשקים זהים ולכן ההבדל היחידי ביניהם הוא שם המחלקה, למדנו לעבוד מול Database אחד , אנו יודעים כיצד לעבוד מול שאר ה- Databases .
Disconnected Scenario – Data Providers משפחת ה- OleDB: OleDbConnection, OleDbCommand, OleDbDataAdapter באמצעות מחלקות אלו ניתן לגשת לכל Database התומך ב- Oledb, Oracle,Access,SqlServer,MySql וכו, עבודה אם מחלקות אלו היא לא Native ולכן נעדיף לעבוד איתם רק כאשר אין אוסף מחלקות ייעודי ל- Database שעובדים מולו. לדוגמה : בעבודה עם Access או SqlServer 6.0 וכו. מחלקות אלו מוגדרות במרחב השמות System.Data.OleDb .
Disconnected Scenario – Data Providers משפחת ה- Sql: SqlConnection, SqlCommand, SqlDataAdapter באמצעות מחלקות אלו ניתן לגשת ל- Sql Server (החל מגירסה 7). עבודה אם מחלקות אלו מותאמת לעבודה רק עם SqlServer ולכן נקבל מהירות גישה גבוהה יותר מאשר עם OleDb. מחלקות אלו מוגדרות במרחב השמות System.Data.SqlClient .
Disconnected Scenario – Data Providers SqlConnection לפני שמריצים שאילתא יש להתחבר ל- Database מחלקה זו אחראית על ההתחברות ל- Database . מחלקה זו מכילה מאפיין חשוב אחד : SqlConnection.ConnectionString מחלקה זו מכילה שתי מתודות עיקריות : SqlConnection.Open() SqlConnection.Close()
Disconnected Scenario – Data Providers SqlConnection : המחלקה מכילה מאפיין אחד חשוב SqlConnection.ConnectionString : מחרוזת זו מגדירה פרמטרים שונים וחיוניים להתחברות ל- Database כגון: סוג ה- Database , שם ה- Database , שם משתמש וסיסמה , כתובת IP של שרת המידע וכו'.
Disconnected Scenario – Data Providers SqlConnection : מחלקה זו מכילה שתי מתודות עיקריות : SqlConnection.Open() מתחברת ל- Database לצורך ביצוע שאילתא וקבלת תשובה (Result set או Scalar) SqlConnection.Close() ניתוק התוכנית מה –Database בסיום העבודה עמו.
Disconnected Scenario – Data Providers SqlConnection – דוגמה: SqlConnection cn = new SqlConnection(); cn.ConnectionString = "Data Source=localhost;Initial Catalog = pubs;Integrated Security = True;"; try { cn.Open(); . . . } catch (Exception exc) { . . . } finally { cn.Close(); }
Disconnected Scenario – Data Providers SqlCommand תפקיד מחלקה זו להריץ שאילתא ( Query) או פרוצדורה מאוחסנת (Stored Procedure) על ה- Database. מחלקה זו מכילה מספר מאפיינים חשובים: SqlCommand.Connection SqlCommand.CommandText SqlCommand.CommandType מחלקה זו מכילה מספר מתודות עיקריות : SqlCommand.ExecuteReader() SqlCommand. ExecuteNonQuery() SqlCommand.ExecuteScalar()
Disconnected Scenario – Data Providers SqlCommand : מחלקה זו מכילה שני מאפיינים מרכזיים : SqlCommand.Connection ייחוס למחלקת ה- Connection , אובייקט ה- Command קובע מה לבקש, אובייקט ה- Connection קובע היכן לבקש . SqlCommand.CommandText הבקשה - גוף השאילתא או הפרוצדורה. SqlCommand.CommandType קובע את סוג הבקשה , שאילתא רגילה או פרוצדורה מאוחסנת.
Disconnected Scenario – Data Providers SqlCommand : מחלקה זו מכילה שלוש מתודות מרכזיות : SqlCommand.ExecuteReader() מתודה זו מריצה שאילתא אשר מצפה לאוסף רשומות (Result Set ). SqlCommand. ExecuteNonQuery() שאילתות עידכון מבנה ה –Database ושאילתות עידכון,מחיקה והוספת רשומות. SqlCommand.ExecuteScalar() הרצת שאילתא בעלת תשובה בודדה כגון : Count, Sum, Average, Date וכו'
Disconnected Scenario – Data Providers SqlCommand – דוגמה: SqlConnection cn = new SqlConnection(); cn.ConnectionString = "Data Source=localhost;Initial Catalog = pubs;Integrated Security = True;"; try { SqlCommand command = new SqlCommand(); command.Connection = cn; command.CommandText = "SELECT au_lname,au_fname,phone FROM authors"; cn.Open(); SqlDataReader reader = command.ExecuteReader(); . . . } catch (Exception exc) { . . } finally { cn.Close(); }
Disconnected Scenario – Data Providers SqlDataAdapter המידע הנדרש נקרא מ- Database המוגדר באובייקט ה-Connection , פריטי המידע הנדרשים מוגדרים באובייקט מהמחלקה Command . תפקידו הראשוני של האובייקט מהמחלקה DataAdapter הוא לבנות את אובייקט ה- Data Cache אשר יכיל את המידע הנדרש בזיכרון התוכנית. תפקידו השני הוא לעדכן את ה- Database בסיום העיבוד.
Disconnected Scenario – Data Providers SqlDataAdapter מגדיר שתי מתודות מרכזיות : SqlDataAdapter.Fill( … ) תפקיד מתודה זו לקרוא מידע מה – Database ולייצר את אובייקט ה- Data Cache של התוכנית, מתודה זו מופעלת בתחילת העיבוד. SqlDataAdapter.Update( … ) תפקיד מתודה זו לשמור בסיום העיבוד את התוצאות ואו השינויים ב- Database מופעלת בסוף העיבוד.
Disconnected Scenario – Data Providers SqlDataAdapter – דוגמה: SqlConnection cn = new SqlConnection(); cn.ConnectionString = "Data Source=localhost;Initial Catalog = pubs;Integrated Security = True;"; DataSet ds = new DataSet(); SqlCommand command = new SqlCommand(); command.Connection = cn; command.CommandText = "SELECT au_lname,au_fname,phone FROM authors"; SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = command; try { cn.Open(); adapter.Fill(ds, "Authors"); } המשך בשקף הבא :
Disconnected Scenario – Data Providers SqlDataAdapter – דוגמה: המשך: catch (Exception exc) { . . } finally { cn.Close(); }
Disconnected Scenario – Data Providers SqlDataAdapter התהליך והמחלקות המשתתפות: SqlCommand SqlDataAdapter DataSet SqlConnection SQL Server 2000
Agenda • ADO.NET Why? • What Is ADO.NET? • Disconnected Scenario. • Disconnected Scenario – Data Providers. • Disconnected Scenario – Data Cache. • Disconnected Scenario – Working With DB. • Data Relations. • DataView. • Connected Scenario.
Disconnected Scenario – Data Cache מחלקות ה- Data Cache : • מוגדרות כולם במרחב השמות System.Data . • מכילות את המידע בזיכרון התוכנית, התוכנית משתמשת במידע האגור בהן לצורך העיבוד ולכן אין לה צורך לפנות ל- Database : DataSet DataTable DataColumn DataRow DataRelation
Disconnected Scenario – Data Cache מחלקות ה- Data Cache : • המחלקה המרכזית היא המחלקה DataSet . • שתי ציפיות מרכזיות ממחלקה זו : א – מבנה מידע דומה ככל הניתן לייצוג המידע ב- Database . ב – התנהגות דומה להתנהגות של ה- Database . • באם ציפיות אלו יתמלאו ניתן לעבוד עם המידע בזיכרון והמידע ב- Database על פי אותו מודל, מה שמאוד יקל על מפתחים שלא ייאלצו ללמוד מודלים שונים לטיפול במידע.
DataSet PrimaryKey DataRow[] Tables DataTable Columns DataColumn Object DataConstraints Constraints Collection Rows DataRow Relations DataRelation Disconnected Scenario – Data Cache מבנה המחלקה DataSet :
DataSet Tables Relations Disconnected Scenario – Data Cache מבנה המחלקה DataSet : כמו המידע ב- Database הרילאציוני כך גם המחלקה DataSet מורכבת מאוסף של טבלאות וקשרים ביניהם.
Disconnected Scenario – Data Cache מבנה המחלקה DataSet : • האוסף Tables הוא אוסף של אובייקטים מהמחלקה DataTable . • כל אובייקט מהמחלקה DataTable מייצג טבלה בזיכרון. • כמו שמקובל ב- Database קיימים קשרים בין הטבלאות בזיכרון, הקשרים נשמרים באוסף Relations המורכב מאובייקטים מהמחלקה DataRelation .
Disconnected Scenario – Data Cache מבנה המחלקה DataTable : כמו טבלה ב- DataBase האובייקט מהמחלקה DataTable המייצג טבלה ב- DataSet בנוי מאוסף של שדות המגדיר את מבנה הטבלה , אוסף של אילוצים על השדות, אוסף של רשומות המכילות את המידע ומפתח ראשי אשר יכול להכיל יותר מאשר שדה אחד.
Disconnected Scenario – Data Cache מבנה המחלקה DataTable : • האוסף Columns הוא אוסף של אובייקטים מהמחלקה DataColumn. • המחלקה DataColumn מתארת שדה בודד בטבלה. • האוסף Columns מתאר את מבנה (Schema) הטבלה. • האוסף Constraints הוא אוסף של אובייקטים מהמחלקה DataConstraint . • המחלקה DataConstraint מייצגת אילוץ בודד (Length, AllowDbNull,Required). • האוסף Rows הוא אוסף של אובייקטים מהמחלקה DataRow . • המחלקה DataRow מייצגת רשומה בודדה. • המערך PrimaryKey מכיל ייחוסים לשדות המוגדרים במפתח.
דוגמאות מבנה DataSet
Agenda • ADO.NET Why? • What Is ADO.NET? • Disconnected Scenario. • Disconnected Scenario – Data Providers. • Disconnected Scenario – Data Cache. • Disconnected Scenario – Working With DB. • Data Relations. • DataView. • Connected Scenario.
Disconnected Scenario – Working With DB זוכרים את השלבים ? • התחברות ל- Database , קריאת המידע הנדרש והעתקתו לזיכרון והתנתקות מה- Database . • פעולות אלו הן באחריותה של המחלקה DataAdapter . • עיבוד המידע מתבצע על אובייקט מהמחלקה DataSet אשר נוצר על ידי ה- DataAdapter , בזמן בעיבוד התוכנית מנותקת מה- DataBase . • בסיום העיבוד התחברות נוספת ל- Database ועידכונו על ידי האובייקט DataAdapter .
Disconnected Scenario – Working With DB ובחלוקה לשלבים שלב א – בניית ה- DataSet התחברות ל- Database , קריאת המידע הנדרש והעתקתו לזיכרון והתנתקות מה- Database . פעולות אלו הן באחריותה של המחלקה DataAdapter . שלב ב - העיבוד עיבוד המידע מתבצע על אובייקט מהמחלקה DataSet אשר נוצר על ידי ה- DataAdapter, בזמן בעיבוד התוכנית מנותקת מה- DataBase. שלב ג – עידכון ה- DataBase בסיום העיבוד התחברות נוספת ל- Database ועידכונו על ידי האובייקט DataAdapter .
Disconnected Scenario – Working With DB שלב א – בניית ה- DataSet • התחברות ל- Database , קריאת המידע הנדרש והעתקתו לזיכרון והתנתקות מה- Database . • בניית ה- DataSet מתבצעת על ידי ה- DataAdapter בשלבים. • בכל קריאה למתודה DataAdapter.Fill(…) מתווסף ל- DataSet אובייקט חדש מהמחלקה DataTable . • לסיום נגדיר את הקשרים (Relation) ידנית. • ישנם מספר צורות אפשריות ליישום שלב א' (כולן מאוד דומות). • על מנת לבצע שלב זה יש להכיר יותר לעומק את המחלקה DataAdapter .
DataAdapter SelectCommand UpdateCommand InsertCommand DeleteCommand DataReader Command Command Command Command Connection Database Disconnected Scenario – Working With DB מבנה ה- DataAdapter
Disconnected Scenario – Working With DB שלב א – בניית ה- DataSet DataSet ds = new DataSet(); SqlConnection cn = new SqlConnection(); cn.ConnectionString = "Data Source=localhost;Initial Catalog = pubs; Integrated Security =True;"; SqlCommand command = new SqlCommand(); command.Connection = cn; command.CommandText = "SELECT au_lname,au_fname,phone FROM authors"; SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = command; המשך ...
Disconnected Scenario – Working With DB שלב א – המשך . . . try { cn.Open(); adapter.Fill(ds, "Authors"); } catch (SqlException exc ) { … } finally { cn.Close(); }