slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
ADO.NET PowerPoint Presentation
Download Presentation
ADO.NET

Loading in 2 Seconds...

play fullscreen
1 / 80

ADO.NET - PowerPoint PPT Presentation


  • 178 Views
  • Uploaded on

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?

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

ADO.NET


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
agenda
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.
agenda1
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
ADO.NET, Why?
  • אפליקציות מודרניות עושות שימוש בהרבה מאוד מידע.
  • המידע יכול להגיע מ- Database (אחד או יותר), מהאינטרנט (קבצי XML) וכו'.
  • ניתן לעבוד ישירות מול ה- Database , אולם זו עבודה מורכבת וקשה.
  • ולכן ,לאורך השנים, פותחו טכנולוגיות שונות המקלות על העבודה מול Databases .
ado net why1
ADO.NET, Why?

טכנולוגיות לעבודה מול DB - אבולוציה

ado net why2
ADO.NET, Why?

המטרה של כל הטכנולוגיות הללו היתה :

  • לפשט את הטיפול במערכות מבוססות מידע.
  • להפוך את המערכות הללו לקלות יותר ליישום.
  • פשוטות יותר לתחזוקה.
  • וזולות יותר.
ado net why3
ADO.NET, Why?
  • ADO.NET הינה הטכנולוגיה האחרונה באבולוציה זו.
  • מותאמת לדרישות מודרניות ולארכיטקטורה מודרנית של טיפול במספר רב של מערכות מידע דרך ה- Web .
agenda2
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
What Is ADO.NET?
  • טכנולוגיה לטיפול ב- Database ובקבצי XML .
  • אוסף של מחלקות, מבנים, ממשקים המספקים גישה מתקדמת וגמישה לטיפול במידע.
  • טכנולוגיה העונה על צרכים מודרניים.
  • מתוכננת לעבוד במודל המכונה

Disconnected environments

  • מסוגלת לעבוד גם במודל הנקרא

Connected environments

  • תמיכה מלאה ב- XML .
what is ado net1
What Is ADO.NET?

מרחבי השמות

System.Data

ה- Root Namespace של עבודה עם ADO.NET .

System.Data.SqlClient

מרחב שמות המספק אוסף של מחלקות, מבנים ממשקים לעבודה מול SqlServer 2000 .

System.Data.OleDb

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

agenda3
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
Disconnected Scenario
  • הטיפול במערכות מידע יכול להיות מבוסס על חיבור קבוע בין התוכנית לבין ה- Database , או חיבור מזדמן בין התוכנית לבין ה- Database .
  • בפרק זה עוסק בחיבור מזדמן ל- Database .
  • צורת עבודה זו מול Database מכונה

Disconnected environment(מערכות מנותקות)

והיא ברירת המחדל בעבודה עם ADO.NET .

disconnected scenario1
Disconnected Scenario

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

disconnected scenario2
Disconnected Scenario

יתרונות

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

חסרונות

  • לא תמיד עובדים עם המידע העדכני ביותר.
  • צריך לטפל בקונפליקטים המתרחשים בין לקוחות שונים המטפלים באותו המידע.
disconnected scenario3
Disconnected Scenario

המחלקות:

בתהליך העבודה עם Database נעבוד עם מספר מחלקות.

את כל המחלקות ניתן לשייך לאחת משתי המשפחות הבאות:

ProvidersData , Data Cache .

מחלקות ה- Data Providers :

תפקידם להגדיר ולנהל את הקשר בין התוכנית ל- Database .

מחלקות ה- Data Cache :

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

agenda4
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
Disconnected Scenario – Data Providers

תפקידם להגדיר ולנהל את הקשר בין התוכנית ל- Database.

במשפחה זו, בין השאר, נמצא את המחלקות המרכזיות הבאות:

XxxConnection

XxxCommand

XxxDataAdapter

disconnected scenario data providers1
Disconnected Scenario – Data Providers

מחלקות ה- Data Providers, תפקידים :

XxxConnection - ניהול ההתחברות ל- Database .

XxxCommand - הבקשה למידע, הרצת שאילתא (Query), או פרוצדורה מאוחסנת (Stored Procedure) על ה- Database .

XxxDataAdapter – בניית ה- Cache על פי השאילתא המוגדרת באובייקט ה- Command , השאילתא רצה על ה- Database שמוגדר באובייקט ה- Connection .

disconnected scenario data providers2
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 providers3
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 providers4
Disconnected Scenario – Data Providers

משפחת ה- Sql:

SqlConnection, SqlCommand, SqlDataAdapter

באמצעות מחלקות אלו ניתן לגשת ל- Sql Server (החל מגירסה 7).

עבודה אם מחלקות אלו מותאמת לעבודה רק עם SqlServer ולכן נקבל מהירות גישה גבוהה יותר מאשר עם OleDb.

מחלקות אלו מוגדרות במרחב השמות System.Data.SqlClient .

disconnected scenario data providers5
Disconnected Scenario – Data Providers

SqlConnection

לפני שמריצים שאילתא יש להתחבר ל- Database

מחלקה זו אחראית על ההתחברות ל- Database .

מחלקה זו מכילה מאפיין חשוב אחד :

SqlConnection.ConnectionString

מחלקה זו מכילה שתי מתודות עיקריות :

SqlConnection.Open()

SqlConnection.Close()

disconnected scenario data providers6
Disconnected Scenario – Data Providers

SqlConnection :

המחלקה מכילה מאפיין אחד חשוב

SqlConnection.ConnectionString :

מחרוזת זו מגדירה פרמטרים שונים וחיוניים להתחברות ל- Database כגון: סוג ה- Database , שם ה- Database , שם משתמש וסיסמה , כתובת IP של שרת המידע וכו'.

disconnected scenario data providers7
Disconnected Scenario – Data Providers

SqlConnection :

מחלקה זו מכילה שתי מתודות עיקריות :

SqlConnection.Open()

מתחברת ל- Database לצורך ביצוע שאילתא וקבלת תשובה (Result set או Scalar)

SqlConnection.Close()

ניתוק התוכנית מה –Database בסיום העבודה עמו.

disconnected scenario data providers8
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 providers9
Disconnected Scenario – Data Providers

SqlCommand

תפקיד מחלקה זו להריץ שאילתא ( Query) או פרוצדורה מאוחסנת (Stored Procedure) על ה- Database.

מחלקה זו מכילה מספר מאפיינים חשובים:

SqlCommand.Connection

SqlCommand.CommandText

SqlCommand.CommandType

מחלקה זו מכילה מספר מתודות עיקריות :

SqlCommand.ExecuteReader()

SqlCommand. ExecuteNonQuery()

SqlCommand.ExecuteScalar()

disconnected scenario data providers10
Disconnected Scenario – Data Providers

SqlCommand :

מחלקה זו מכילה שני מאפיינים מרכזיים :

SqlCommand.Connection

ייחוס למחלקת ה- Connection , אובייקט ה- Command קובע מה לבקש, אובייקט ה- Connection קובע היכן לבקש .

SqlCommand.CommandText

הבקשה - גוף השאילתא או הפרוצדורה.

SqlCommand.CommandType

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

disconnected scenario data providers11
Disconnected Scenario – Data Providers

SqlCommand :

מחלקה זו מכילה שלוש מתודות מרכזיות :

SqlCommand.ExecuteReader()

מתודה זו מריצה שאילתא אשר מצפה לאוסף רשומות (Result Set ).

SqlCommand. ExecuteNonQuery()

שאילתות עידכון מבנה ה –Database ושאילתות עידכון,מחיקה והוספת רשומות.

SqlCommand.ExecuteScalar()

הרצת שאילתא בעלת תשובה בודדה כגון : Count, Sum, Average, Date וכו'

disconnected scenario data providers12
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 providers13
Disconnected Scenario – Data Providers

SqlDataAdapter

המידע הנדרש נקרא מ- Database המוגדר באובייקט ה-Connection , פריטי המידע הנדרשים מוגדרים באובייקט מהמחלקה Command .

תפקידו הראשוני של האובייקט מהמחלקה DataAdapter הוא לבנות את אובייקט ה- Data Cache אשר יכיל את המידע הנדרש בזיכרון התוכנית.

תפקידו השני הוא לעדכן את ה- Database בסיום העיבוד.

disconnected scenario data providers14
Disconnected Scenario – Data Providers

SqlDataAdapter

מגדיר שתי מתודות מרכזיות :

SqlDataAdapter.Fill( … )

תפקיד מתודה זו לקרוא מידע מה – Database ולייצר את אובייקט ה- Data Cache של התוכנית, מתודה זו מופעלת בתחילת העיבוד.

SqlDataAdapter.Update( … )

תפקיד מתודה זו לשמור בסיום העיבוד את התוצאות ואו השינויים ב- Database מופעלת בסוף העיבוד.

disconnected scenario data providers15
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 providers16
Disconnected Scenario – Data Providers

SqlDataAdapter – דוגמה:

המשך:

catch (Exception exc) { . . }

finally

{

cn.Close();

}

disconnected scenario data providers17
Disconnected Scenario – Data Providers

SqlDataAdapter

התהליך והמחלקות המשתתפות:

SqlCommand

SqlDataAdapter

DataSet

SqlConnection

SQL Server 2000

agenda5
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
Disconnected Scenario – Data Cache

מחלקות ה- Data Cache :

  • מוגדרות כולם במרחב השמות System.Data .
  • מכילות את המידע בזיכרון התוכנית, התוכנית משתמשת במידע האגור בהן לצורך העיבוד ולכן אין לה צורך לפנות ל- Database :

DataSet

DataTable

DataColumn

DataRow

DataRelation

disconnected scenario data cache1
Disconnected Scenario – Data Cache

מחלקות ה- Data Cache :

  • המחלקה המרכזית היא המחלקה DataSet .
  • שתי ציפיות מרכזיות ממחלקה זו :

א – מבנה מידע דומה ככל הניתן לייצוג המידע ב- Database .

ב – התנהגות דומה להתנהגות של ה- Database .

  • באם ציפיות אלו יתמלאו ניתן לעבוד עם המידע בזיכרון והמידע ב- Database על פי אותו מודל, מה שמאוד יקל על מפתחים שלא ייאלצו ללמוד מודלים שונים לטיפול במידע.
disconnected scenario data cache2

DataSet

PrimaryKey

DataRow[]

Tables

DataTable

Columns

DataColumn

Object

DataConstraints

Constraints

Collection

Rows

DataRow

Relations

DataRelation

Disconnected Scenario – Data Cache

מבנה המחלקה DataSet :

disconnected scenario data cache3

DataSet

Tables

Relations

Disconnected Scenario – Data Cache

מבנה המחלקה DataSet :

כמו המידע ב- Database הרילאציוני כך גם המחלקה DataSet מורכבת מאוסף של טבלאות וקשרים ביניהם.

disconnected scenario data cache4
Disconnected Scenario – Data Cache

מבנה המחלקה DataSet :

  • האוסף Tables הוא אוסף של אובייקטים

מהמחלקה DataTable .

  • כל אובייקט מהמחלקה DataTable מייצג טבלה

בזיכרון.

  • כמו שמקובל ב- Database קיימים קשרים בין

הטבלאות בזיכרון, הקשרים נשמרים באוסף Relations המורכב

מאובייקטים מהמחלקה DataRelation .

disconnected scenario data cache5
Disconnected Scenario – Data Cache

מבנה המחלקה DataTable :

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

disconnected scenario data cache6
Disconnected Scenario – Data Cache

מבנה המחלקה DataTable :

  • האוסף Columns הוא אוסף של אובייקטים

מהמחלקה DataColumn.

  • המחלקה DataColumn מתארת שדה בודד בטבלה.
  • האוסף Columns מתאר את מבנה (Schema) הטבלה.
  • האוסף Constraints הוא אוסף של אובייקטים מהמחלקה DataConstraint .
  • המחלקה DataConstraint מייצגת אילוץ בודד (Length, AllowDbNull,Required).
  • האוסף Rows הוא אוסף של אובייקטים מהמחלקה DataRow .
  • המחלקה DataRow מייצגת רשומה בודדה.
  • המערך PrimaryKey מכיל ייחוסים לשדות המוגדרים במפתח.
slide43
דוגמאות

מבנה DataSet

agenda6
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
Disconnected Scenario – Working With DB

זוכרים את השלבים ?

  • התחברות ל- Database , קריאת המידע הנדרש

והעתקתו לזיכרון והתנתקות מה- Database .

  • פעולות אלו הן באחריותה של המחלקה

DataAdapter .

  • עיבוד המידע מתבצע על אובייקט מהמחלקה

DataSet אשר נוצר על ידי ה- DataAdapter ,

בזמן בעיבוד התוכנית מנותקת מה- DataBase .

  • בסיום העיבוד התחברות נוספת ל- Database

ועידכונו על ידי האובייקט DataAdapter .

disconnected scenario working with db1
Disconnected Scenario – Working With DB

ובחלוקה לשלבים

שלב א – בניית ה- DataSet

התחברות ל- Database , קריאת המידע הנדרש והעתקתו לזיכרון והתנתקות מה- Database .

פעולות אלו הן באחריותה של המחלקה DataAdapter .

שלב ב - העיבוד

עיבוד המידע מתבצע על אובייקט מהמחלקה DataSet אשר נוצר על ידי ה- DataAdapter, בזמן בעיבוד התוכנית מנותקת מה- DataBase.

שלב ג – עידכון ה- DataBase

בסיום העיבוד התחברות נוספת ל- Database ועידכונו על ידי האובייקט DataAdapter .

disconnected scenario working with db2
Disconnected Scenario – Working With DB

שלב א – בניית ה- DataSet

  • התחברות ל- Database , קריאת המידע הנדרש והעתקתו

לזיכרון והתנתקות מה- Database .

  • בניית ה- DataSet מתבצעת על ידי ה- DataAdapter בשלבים.
  • בכל קריאה למתודה DataAdapter.Fill(…) מתווסף ל- DataSet

אובייקט חדש מהמחלקה DataTable .

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

DataAdapter .

disconnected scenario working with db3

DataAdapter

SelectCommand

UpdateCommand

InsertCommand

DeleteCommand

DataReader

Command

Command

Command

Command

Connection

Database

Disconnected Scenario – Working With DB

מבנה ה- DataAdapter

disconnected scenario working with db4
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 db5
Disconnected Scenario – Working With DB

שלב א – המשך

. . .

try

{

cn.Open();

adapter.Fill(ds, "Authors");

}

catch (SqlException exc ) { … }

finally

{

cn.Close();

}

disconnected scenario working with db6
Disconnected Scenario – Working With DB

שלב א – בניית ה-DataSet (אפשרות נוספת)

DataSet ds = new DataSet();

String cn_str = "Data Source=localhost;Initial Catalog = pubs; Integrated Security =True;";

string query = "SELECT au_lname,au_fname,phone FROM authors";

SqlDataAdapter adapter = new SqlDataAdapter(query, cn_str);

try

{

adapter.Fill(ds, "Authors");

}

catch (SqlException exc) { … }

disconnected scenario working with db7
Disconnected Scenario – Working With DB

שלב א – בניית ה- DataSet (הוספת קשרים)

  • לאחר שקראנו את הטבלאות ניתן ורצוי להוסיף את הקשרים ביניהם.
  • את הקשרים יוצרים באמצעות המחלקה DataRelation .

לדוגמה :

DataRelation dr = new DataRelation(“”CitiesPersons,

ds.Tables[“Cities”].Columns[“CityID”],

ds.Tables[“Persons”].Columns[“CityID”]);

ds.Relations.Add(dr);

disconnected scenario working with db8
Disconnected Scenario – Working With DB

שלב ב – העיבוד

עיבוד המידע מתבצע על אובייקט מהמחלקה DataSet אשר

נוצר על ידי ה- DataAdapter, בזמן בעיבוד התוכנית מנותקת

מה- DataBase.

בשלבי העיבוד השונים נבצע את הפעולות הבאות:

הצגת נתונים – הצגת המידע הקיים ברשומות הקיימות.

שינוי נתונים – שינוי נתונים הקיימים ברשומות הקיימות.

הוספת נתונים – הוספת רשומות חדשות.

מחיקת נתונים – מחיקת רשומה קיימת.

  • פעולות אלו מתבצעות בזיכרון ולכן ה- Database

אינו מתעדכן בהם.

disconnected scenario working with db9
Disconnected Scenario – Working With DB

שלב ב – העיבוד (הצגת הנתונים)

הנתונים כולם נמצאים בתוך האוסף Tables .

ניתן לגשת לטבלה הרצויה באמצעות שמה או על פי מקומה באוסף:

לדוגמה:

string str = ds.Tables[“Persons”].Rows[0][“LastName”].ToString();

או :

string str = ds.Tables[0].Rows[0][1].ToString();

כנ"ל לשדות השונים.

disconnected scenario working with db10
Disconnected Scenario – Working With DB

שלב ב – העיבוד (הצגת הנתונים)

לעיתים נרצה לבחור את הנתונים אותם נרצה להציג.

ניתן לבחור את הנתונים על ידי המתודה :

DataTable.Select(…)

לדוגמה:

DataRow[] arr = ds.Tables[“Persons”].Select(“CityId = 12”);

foreach(DataRow dr in arr)

Console.WriteLine(dr[“LasntName”].ToString());

המתודה Select יכולה מחזירה את כל הרשומות אשר עונים על התנאי.

disconnected scenario working with db11
Disconnected Scenario – Working With DB

שלב ב – העיבוד (שינוי הנתונים)

לדוגמה:

ds.Tables[“Persons”].Rows[0][“LastName”] = “Shoshana”;

או :

ds.Tables[0].Rows[0][1] = “Shoshana”;

disconnected scenario working with db12
Disconnected Scenario – Working With DB

שלב ב – העיבוד(הוספת נתונים חדשים)

הקצאת רשומה חדשה :

DataRow dr = ds.Tables["Persons"].NewRow();

הוספת הנתונים לרשומה החדשה:

dr["LastName"] = "Sonya";

dr["FirstName"] = "IsTheBest";

. . .

הוספת הרשומה החדשה לאוסף Rows :

ds.Tables["Persons"].Rows.Add(dr);

disconnected scenario working with db13
Disconnected Scenario – Working With DB

שלב ב – העיבוד(מחיקת רשומות)

איתור הרשומה המיועדת למחיקה:

DataRow[] arr = ds.Tables["Persons"].Select("LastName = 'Sonya’);

סימון הרשומה כמיועדת למחיקה (לא מחיקה פיזית)

arr[0].Delete();

disconnected scenario working with db14
Disconnected Scenario – Working With DB

שלב ג – עידכון ה- Database

  • עד כה כל השינויים שנעשו נשמרו ב- DataSet .
  • בסיום העבוד נרצה לשמור את המידע המעובד ב- Database.
  • לשם כך ניעזר במתודה DataAdapter.Update(…) .
  • כזכור, המחלקה DataAdapter מכילה ארבעה ייחוסים

לאובייקט Command :

SelectCommand

UpdateCommand

InsertCommand

DeleteCommand

disconnected scenario working with db15
Disconnected Scenario – Working With DB

שלב ג – עידכון ה- Database

  • כאשר קראנו מידע באמצעות ה- DataAdapter דאגנו להגדיר את

ה- SelectCommand .

המתודה DataAdapter.Fill(…) עושה בו שימוש.

  • כאשר נרצה לעדכן את ה- Database ניעזר במתודה

DataAdapter.Update(…) .

  • מתודה זו עושה שימוש ב:

UpdateCommand – לעידכון רשומות קיימות ב- Database .

InsertCommand - להוספת רשומות חדשות ל-Database .

DeleteCommand - למחיקת רשומות קיימות מה- Database.

  • המתודה DataAdapter.Update(…) מבצעת את כל שלושתדוגי

העידכונים.

disconnected scenario working with db16
Disconnected Scenario – Working With DB

שלב ג – עידכון ה- Database

  • ניתן להגדיר את מחלקות ה- Command הללו ידנית.
  • ניתן להיעזר במחלקה CommandBuilder אשר תייצר לנו אותם.
  • מחלקה זו מסוגלת לייצר את שלושת השאילתות בצורה אוטומטית

בתנאי שלא השתמשנו בשאילתת JOIN ב- Select Command .

disconnected scenario working with db17
Disconnected Scenario – Working With DB

שלב ג – עידכון ה- Database

string cn_str = "Data Source=\"PhoneBook.mdb\";Provider=\"Microsoft.Jet.OLEDB.4.0\";";

string query = "SELECT * FROM Persons";

OleDbDataAdapter adapter = new OleDbDataAdapter(query, cn_str);

OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

adapter.InsertCommand = builder.GetInsertCommand();

adapter.UpdateCommand = builder.GetUpdateCommand();

adapter.DeleteCommand = builder.GetDeleteCommand();

adapter.Update(ds,"Persons");

agenda7
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.
data relations
Data Relations

ציינו שתי דרישות מה- Data Cache :

הדרישה הראשונה :

מבנה מידע דומה ככל הניתן לייצוג המידע ב- Database .

מבנה המחלקה DataSet עונה

על הדרישה זו.

data relations1
Data Relations

הדרישה השניה :

התנהגות דומה להתנהגות של ה- Database.

במה דרישה זו באה לידי ביטוי :

1 – הקפדה על האילוצים (מובנה במחלקה DataColumn ).

* ניסיון להוסיף רשומה חדשה ל- Database בעלת מפתח זהה לרשומה אשר כבר קיימת יעורר

חריגה.

* רשומה חדשה אינה מכילה שדה חובה.

* חריגה מטווח ערכים של שדה מסויים ברשומה חדשה.

3 – ניסיון להוסיף רשומה חדשה אשר מכילה מפתח זר (Foreign Key ) בניגוד לקשרים עם טבלת האם יעורר חריגה.

data relations2
Data Relations

הדרישה השניה :

התנהגות דומה להתנהגות של ה- Database.

Relational Database הנו מסד נתונים המכיל טבלאות וקשרים בין טבלאות.

לדוגמה :

כל ניסיון להוסיף רשומה חדשה לטבלה Persons

אשר מכילה CityID אשר אינו קיים בטבלה Cities

יעורר חריגה.

data relations3
Data Relations

הדרישה השניה :

התנהגות דומה להתנהגות של ה- Database.

המטרה:

שמירה על שלמות הנתונים.

או על נכונות הנתונים.

data relations4
Data Relations

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

הסכנה:

ניסיון להוסיף רשומה חדשה לטבלה Persons

אשר מכילה CityID אשר אינו קיים בטבלה Cities

יתקבל ואינו יעורר חריגה.

data relations5
Data Relations

המחלקה DataRelation

  • באמצעות המחלקה DataRelation נגדיר קשרים בין טבלאות ב- DataSet .
  • הקשרים המוגדרים ב- DataSet אינם חייבים להיות חופפים לקשרים המוגדרים ב- Database .
  • ניתן להגדיר ב- DataSet קשרים בין טבלאות אשר נקראו מ- Database שונים, או מקבצי XML או שילוב בין השניים.
data relations6
Data Relations

דוגמה:

m_PersonsAdapter.Fill(m_DataSet,"Persons");

m_CitiesAdapter.Fill(m_DataSet,"Cities");

m_DataSet.Relations.Add("CitiesPersons“,m_DataSet.Tables["Cities"].Columns["CityID"],

m_DataSet.Tables["Persons"].Columns["CityID"]);

data relations7
Data Relations
  • ניתן לנצל את ה- DataRelations על מנת לשמור על שלמות המידע:

כל ניסיון להוסיף DataRow חדש ל- DataTablePersons כאשר השדה CityID מציין עיר שלא קיימת ב- Cities DataTable יעורר חריגה.

  • ניתן לנצל את ה- DataRelations על מנת נווט בין הטבלאות:

ds.Tables[“Cities”].Rows(0).GetChildRows(“CitiesPersons");

ds.Tables[“Persons”].Rows(0).GetParentRow (“CitiesPersons");

agenda8
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.
data view
Data View
  • DataViewמאפשר להציג את המידע שבטבלה בצורות שונות.
  • מאפשר לבצע מיון וסינון (על פי שדות או RowState) .
  • מכל טבלה ניתן לייצר מספר DataViews , כל DataView נוצר מטבלה אחת בודדה.

DataView view = newDataView(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;

agenda9
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.
connected scenario

XxxDataReader

XxxConnection

Connected Scenario
  • במערכות מחוברות התוכנית אינה מתנתקת מה-Database לכל אורך תהליך העבודה.

Data Source

XxxCommand

connected scenario1
Connected Scenario

יתרונות

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

חסרונות

  • לא ניתן להעביר בקלות יחידות מידע ממחשב לקוח אחד לשני.
  • קיימת תלות בנגישותו של מקור המידע.
connected scenario2
Connected Scenario

גם בעבודה כ- Full Connected ניעזרבמחלקות:

XxxCommand, XxxConnection .

בנוסף אליהן ניעזר במחלקה XxxDataReader .

תפקידה לקרוא את תוצאת השאילתא אשר אובייקט ה- Command העביר ל- Database .

כל עוד האובייקט מהמחלקה XxxDataReader מבצע את עבודתו הקשר ל- Database חייב להיות פתוח.

בסיום העבודה מול ה- Database חובה לסגור את הקישוריות ל- Database .

כל העבודה כ- Full Connected הינה ידנית (אין Wizards).

connected scenario3
Connected Scenario

המחלקה XxxDataReader

  • ניעזר בה על מנת לקרוא מידע ב- Full Connected Mode .
  • המחלקה DataReader היא Forward Only ו- Read Only.
  • נוצרת על ידי המתודה Command.ExecuteReader() .
connected scenario4
Connected Scenario

המחלקה XxxDataReader

דוגמה :

SqlDataReader myReader;

myReader = myCommand.ExecuteReader();

while (myReader.Read())

{

Console.WriteLine(myReader[“FieldName1”] + ", " + myReader[“FieldName2”]);

}

myReader.Close();

myConnection.Close();