ADO.NET ( A ctive D ata O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

81
ADO.NET ( Active Data Objects . NET) tworzenie i przetwarzanie lokalnych, relacyjnych baz danych współpraca z zewnętrznymi systemami zarządzania relacyjnymi bazami danych

description

ADO.NET ( A ctive D ata O bjects . NET) ·    tworzenie i przetwarzanie lokalnych, relacyjnych baz danych ·   współpraca z zewnętrznymi systemami zarządzania relacyjnymi bazami danych. Lokalna baza danych programu ( System.Data ) - PowerPoint PPT Presentation

Transcript of ADO.NET ( A ctive D ata O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

Page 1: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

ADO.NET

( Active Data Objects . NET)

       tworzenie i przetwarzanie lokalnych,

relacyjnych baz danych

   współpraca z zewnętrznymi systemami

zarządzania relacyjnymi bazami danych

Page 2: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

Lokalna baza danych programu( System.Data )

    przestrzeń nazw System.Data klasy:

DataColumn, DataRow, DataTable, DataGridView, DataSet

       DataColumn reprezentacja pojedynczej kolumny tabeli danych DataTable

DataColumn colName = new DataColumn();

colName.DataType = Type.GetType("System.String");

// ReadOnly, Caption, ColumnName

Page 3: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       dodawanie do tabeli danych

DataTable myTable = new DataTable("MyTable");

myTable.Columns.Add(colName);

       autoinkrementacja (przy tworzeniu wierszy)

DataColumn empID = new DataColumn ("EmpID", Type.GetType("System.Int32"));

empID.AutoIncrement = true;

empID.AutoIncrementSeed = 100;

empID.AutoIncrementStep = 10;

Page 4: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       DataRow wiersz tabeli danych DataTable

DataTable empTable = new DataTable("Employees");

// columns EmpID, FirstName, LastName

DataRow row = empTable.NewRow(); // !

row["FirstName"] = "John";

row["LastName"] = "Brown";

empTable.Rows.Add(row);

// .DataRow.Delete()

// .AcceptChanges(), .RejectChanges(),

// .BeginEdit(), .EndEdit(), .CancelEdit()

// .DataRow.Deleted , .Detached, .Modified

// .New, .Unchanged

Page 5: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       DataTable tabela danych (relacja)

─    definiowanie i dodawanie kolumn

─    dodawanie i wypełnianie wierszy

─    określenie klucza głównego ( kluczy )

DataColumn[ ] PK = new DataColumn [ 1 ];

PK [ 0 ] = MyTable.Columns["EmpID"];

MyTable.PrimaryKey = PK;

─        wyświetlanie tabeli danych

element DataGridView

─        przeciągnąć z palety elementów lub

DataGridView MyGrid = new DataGridView();

─ następnie

MyGrid.DataSource = MyTable;

Page 6: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       usuwanie wierszy

try

{ MyTable.Rows[ rowNumber ].Delete( );

MyTable.AcceptChanges( );

}

catch( Exception ex )

{

MessageBox.Show( ex.Message );

}

Page 7: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       filtrowanie tabeli danych 

string filterStr = "FirstName='John'";

DataRow [ ] TheFirstName =

MyTable.Select( filterStr ); // ,ftSt2, ...

       wyrażenie filtrujące ( wybrane operatory i funkcje)

AND OR // operatory logiczne

< <= > >= = <> IN LIKE // relacje

+ - * / % // operatory arytmetyczne

*xxx xxx* %xxx xxx% // uogólnienia

Sum Avg Min Max Count StDev Var // funkcje

Page 8: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       sortowanie tabeli danych

 TheFirstName = MyTable.Select ( filterStr, "LastName ASC");

// "LastName DESC"

 

       aktualizacja wierszy

DataRow temp;  

for(int i=0; i < TheFirstName.Length; i++)

{

temp = TheFirstName[ i ];

temp["FirstName"] = "Ben";

}

Page 9: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       ograniczenia : Unique, Foreign Key

try

{

Table_A.Rows.Add(dr);

}catch (ConstraintException ce){

MessageBox.Show (ce.Message ); }

Page 10: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

     zapis/odczyt do/z plików dyskowych

- serializacja binarna

- serializacja XML

- czytak (tylko odczyt)

DataTableReader dtR = dt.CreateDataReader();

while (dtR.Read())

for (int i = 0; i < dtReader.FieldCount; i++) { // ……… }

dtR.Close();DaBa

Page 11: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       DataSet relacyjna baza danych

       dowolna liczba tabel DataTable z określonymi powiązaniami

Customers Inventory

FirstNameLastNameCustID (k)

CarID (k)MakeColorPetName

Orders

OrderID (k)CarIDCustID

Page 12: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       tworzenie bazy danych

// Data Tables

private DataTable inventoryTable = new DataTable("Inventory");

private DataTable customersTable = new DataTable("Customers");

private DataTable ordersTable = new DataTable("Orders");

// make columns, set keys

Page 13: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// Data Set

private DataSet carsDataSet =

new DataSet("CarDataSet");

// add to data set

carsDataSet.Tables.Add(ordersTable);

carsDataSet.Tables.Add(customersTable);

carsDataSet.Tables.Add(carsTable);

// connect to data grid

CarDataGrid.SetDataBinding (carsDataSet, "Inventory");

CustomerDataGrid.SetDataBinding (carsDataSet, "Customers");

Page 14: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       właściwości i funkcje klasy DataSet

DataSet Work = new DataSet("Cars Workshop");

Work.ExtendedProperties["TimeStamp"] = DateTime.Now; Work.ExtendedProperties["DataSetID"] = Guid.NewGuid(); Work.ExtendedProperties["Company"] = "Blue Skrew Super Shop";

Page 15: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

▪    serializacja do/z pliku XML

.dataSet1.WriteXml("Plik.xml");

.dataSet1.WriteXml("Plik.xml", XmlWriteMode.WriteSchema);

.dataSet1.ReadXml("Plik.xml");

.dataSet1.ReadXml("Plik.xml",XmlReadMode.ReadSchema);

Page 16: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

▪ inne funkcje klasy DataSet

.AcceptChanges()

.Clear()

.Clone()

.Copy()

.GetChanges() // tylko zmienione

.HasChanges()

.Merge()

.RejectChanges()

Grid

Page 17: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       definiowanie powiązań pomiędzy tabelami

DataRelation dr = new DataRelation("CustomerOrder",

// parent

carsDataSet.Tables["Customers"]. Columns["CustID"],

// child carsDataSet.Tables["Orders"].

Columns["CustID"]);

carsDataSet.Relations.Add(dr); // Exception

dr = new DataRelation("InventoryOrder",

carsDataSet.Tables["Inventory"].

Columns["CarID"],

carsDataSet.Tables["Orders"].

Columns["CarID"]);

carsDataSet.Relations.Add(dr);

Page 18: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       nawigowanie pomiędzy tabelami, np. wyszukanie opisu zamówienia i opisu samochodów na podstawie custID

string strInfo = "";

DataRow drCust = null;

DataRow[ ] drsOrder = null;

int theCust = ... ; // custID

 

// using custID, get the correct row

drCust = carsDataSet.Tables["Customers"]. Rows[theCust];

strInfo += "Customer Name" + drCust["FirstName"] + "\n";

Page 19: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// navigate from customer table// to order table.

 

drsOrder = drCust.GetChildRows (carsDataSet.Relations["CustomerOrder"]);

// Get customer orders descriptions

 

if(drsOrder != null)

foreach(DataRow r in drsOrder)

strInfo += "Order Number: " + r["OrderID"] + "\n";

Page 20: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// navigate from order table // to inventory table

 

if (drsOrder != null)

{

DataRow[ ] drsInv = new DataRow [drsOrder.Length];

 

for(int i = 0; i < drsOrder.Length; ++i )

drsInv[i] = drsOrder[i].GetParentRows

(carsDataSet.Relations["InventoryOrder"]);

}

Page 21: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// Get cars descriptions

 

if(drsInv.Length > 0)

foreach(DataRow r in drsInv)

{

strInfo += "Make: " + r["Make"] + "\n";

strInfo += "Color: " + r["Color"] + "\n";

strInfo += "Pet Name: " + r["PetName"] + "\n";

}

MessageBox.Show(strInfo + " Info based on cust ID");

CarDataSet

PracSam

Page 22: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       LINQ to DataSet

var ImPe =

from osa

in dataSet1.Tables["Osoby"].AsEnumerable()

where osa["Imie"].ToString() == "Alicja" //osa["Imie"] : object

select new { im = osa["Imie"], pe = osa["Pobory"] };

foreach (var os in ImPe)

st += os.im + ", " + os.pe.ToString() + "\n";

LinqDS

Page 23: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

Współpraca z DBMS

       tryb połączeniowy

       tryb bezpołączeniowy

       Entity Framework

Page 24: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       Dostawcy danych ( data providers )

Connection // połączenie

Command // zapytanie SQL

DataReader // czytak

DataAdapter // odwzorowanie

Parametr // parametr

Transaction // transakcja

Page 25: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       Dostawcy danych ( data providers )

- wbudowani, np:

- zewnętrzni

www.sqlsummit.com/DataProv.htm

ODBC databases Microsoft OLE DB Provider for ODBC

Microsoft Jet databases OLE DB Provider for Microsoft Jet

Microsoft SQL Server Microsoft OLE DB Provider for SQL Server

Oracle databases Microsoft OLE DB Provider for Oracle

Page 26: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       wybór dostawcy na podstawie pliku konfiguracyjnego

enum DataProvider { SqlServer, OleDb, Odbc, None }  // Read the provider key.string dataProvString = ConfigurationManager.AppSettings["provider"]; // Transform string to enum.DataProvider dp = DataProvider.None;if (Enum.IsDefined(typeof(DataProvider), dataProvString)) dp = (DataProvider)Enum. Parse(typeof(DataProvider), dataProvString);elseConsole.WriteLine("Sorry, no provider exists!");

Page 27: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// App.config

<configuration>

<appSettings>

<!-- This key value maps to one of

enum values-->

<add key="provider" value="SqlServer"/>

</appSettings>

</configuration>

Page 28: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       tryb połączeniowy

- tworzenie i konfigurowanie obiektu połączenia

- tworzenie i konfigurowanie obiektu poleceń

- tworzenie czytaka przekazującego polecenie

- odczytywanie kolejnych rekordów i ich przetwarzanie

Page 29: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

- połączenie

using (SqlConnection scn = new SqlConnection())

{

scn.ConnectionString =

// ciag par Property = Value

@"DataSource=(local)\SQLEXPRESS;" +

"Integrated Security=SSPI;" +

"Initial Catalog=AutoLot" +

"Connect Timeout=50";

scn.Open();

 }

Page 30: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       klasa SqlConnectionStringBuilder

SqlConnectionStringBuilder cnStb = new SqlConnectionStringBuilder();

cnStb.InitialCatalog = ".\Database";

cnStb.DataSource = @"(local)";

// SQL Server

cnStb.ConnectTimeout = 35;

cnStb.IntegratedSecurity = true;

Page 31: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       odczytywanie stanu połączenia

scn.DataSource

scn.Database

scn.ConnectionTimeout

scn.State

...............

//

enum ConnectionState

{ Broken, Cloosed, Connecting,

Executing, Fetching, Open }

Page 32: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

- polecenie

string strSQL = "Select * from Customers"; SqlCommand FirstCommand = new SqlCommand(strSQL,scn);

// albo

SqlCommand NextCommand =

new SqlCommand( );

NextCommand.Connection = scn;

NextCommand.CommandText = strSQL;

Page 33: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       odczytanie strumienia rekordów (bez nawigacji, bez zapisu)

SqlDataReader FirstReader;

FirstDataReader = FirstCommand.ExecuteReader();

while ( FirstDataReader.Read() )

{ .... FirstDataReader ["Make"] ..... }

// można też przekazywać parametry

// SqlParameter

// i wykonywać procedury z bazy danych

// FirstCommand.ExecuteNonQuery

CarsDtReader

Page 34: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       indeksowanie pól

SqlDataReader sdr = sCmd.ExecuteReader();

while (sdr.Read())

for(int i = 0; i < sdr.FieldCount; ++i)

{

Console.WriteLine("{0} = {1}", sdr.GetName(i), sdr.GetValue(i).ToString() );

}

Page 35: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       odczytywanie rekordów z wielu źródeł

SqlCommand scmd = new SqlCommand(

"SELECT * FROM Customers;" +

"SELECT * FROM Orders", cns);

SqlDataReader sdr = scmd.ExecuteReader();

do

while (sdr.Read())

for(int i = 0; i < sdr.FieldCount; ++i)

{ // ............ }

while(sdr.NextResult());

Page 36: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       tryb bezpołączeniowy

       - odwzorowanie bazy danych w DataSet DataAdapter

- nie jest konieczne otwieranie i zamykanie

połączenia z bazą danych

- funkcje i właściwości klasy DataAdapter :

Fill() // odwzorowanie wyniku zapytania

SelectCommand

InsertCommand

UpdateCommand

DeleteCommand

Update( )

Page 37: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// odwzorowanie bezpośrednie

string cnStr = "Integrated Security=SSPI;” +

"Initial Catalog=AutoLot;" +

@"DataSource=(local)\SQLEXPRESS";

DataSet ds = new DataSet("AutoLot");

SqlDataAdapter dAdapt = new SqlDataAdapter( "Select * From Inventory", cnStr);

dAdapt.Fill(ds, "Inventory");

Page 38: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// redefinicja nazw

DataTableMapping custMap = dAdapt.TableMappings.Add(

"Inventory", "Magazyn");custMap.ColumnMappings.Add("CarID",

"Identyfikator");custMap.ColumnMappings.Add("Make", "Model");

Page 39: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// aktualizacja bazy danych

DataSet DS = new DataSet("CarsDataSet");

dAdapt.Fill(DS, "Orders");

// dodawanie rekordów do tabeli zamówień

DataRow[] DataRowArray = DS.Tables["Orders"].

Select(null, null, DataViewRowState.Added);

dAdapt.Update( DataRowArray );

Page 40: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// generowanie pozostałych poleceń// w wersji domyślnej (śledzenie zmian)

SqlDataAdapter dAdapt = new SqlDataAdapter("Select * From Orders", cnStr);dAdapt.Fill(DS, "Orders"); // . . . modyfikacja DS

SqlCommandBuilder sqlB =

new SqlCommandBuilder(dAdapt);

dAdapt.Update(DS, "Orders");

Cars

Page 41: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       LINQ to SQL

- pobieranie danych z DataSet

( zwykłe połączenie z bazą danych)

var NaPe = from car in

dataSet1.Tables["Inventory"].AsEnumerable()

where (string)car["Color"] == "Red"

select new { ma = (string)car["Make"], pe = (string)car["PetName"] };

Linq3

Page 42: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

     Pobieranie danych

do obiektu specjalizowanej klasy

dziedziczącej z klasy DataSet

( strongly typed DataSet )

• automatyczne dołączanie bazy danych

DataGridView / Choose Data Source /

Add Project Data Source / Database / Database

New Connection / Browse / Tables

Page 43: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• powstaje klasa opakowująca bazę danych :

tabele, wiersze => klasy wewnętrzne tej klasy

kolumny => składowe klasy wierszy

• powstaje klasa specjalizowanego adaptera danych

=> wywoływany w momencie ładowania formy

TDS

Page 44: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• pobieranie danych

var MaCo = from car in carsDataSet.inventory

where car.Color == "Black"

select new { ma = car.Make, pt = car.PetName };

• aktualizacja

CarsDataSet.inventoryRow dr = carsDataSet.inventory.NewinventoryRow();

dr.CarID = 387; dr.Color = "Black";

dr.Make = "BMW"; dr.PetName = "Mimi";

carsDataSet.inventory.AddinventoryRow(dr);

Page 45: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// lub

carsDataSet.inventory.AddinventoryRow(

444,

"Alfa Romeo",

"Gold",

"Beauty");

// następnie

inventoryTableAdapter.Update

(carsDataSet.inventory);

Page 46: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• dla elementu dataGridView wskazać jako źródło danych wybraną tabelę

=> powstanie specjalizowany obiekt powiązania

• aktualizacja na podstawie dataGridView

inventoryBindingSource.ResetBindings(false);

inventoryTableAdapter.Update(carsDataSet.inventory);

Linq4

Page 47: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

ENTITY FRAMEWORKEntity Data Model

• współpraca bezpośrednio z SZBD ( bez kopiowania do DataSet )

• entity – dane związane z pewnym obiektem przetwarzane przez konkretną aplikację { Pracownik : Nazwisko, Pensja }

Page 48: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• Database first - EF tworzy klasy odwzorowujące istniejącą bazę danych

• Design first - program zawiera definicję modelu, na podstawie którego EF tworzy bazę danych

• Code first - EF definiuje model i następnie bazę danych na podstawie istniejącego programu

Page 49: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• mapa (entity) specjalizowana klasa odwzorowująca bazę danych i tworząca jej model

• obsługa mapy (object services) współdziałanie programu z modelem (śledzenie zmian,

aktualizacja, itp.)

• klient mapy (entity client) nawiązywanie połączenia z bazą danych, generowanie zapytań SQL, itp.

Page 50: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• trzy poziomy modeli (plik .edmx):

– model koncepcyjny : definicja map i powiązań między mapami (.csdl)

– model logiczny : odwzorowanie map i ich powiązań w tabele bazy danych (.msl)

– model fizyczny : reprezentacja dostawcy danych (.ssdl)

Page 51: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

Database First

• klasa ObjectContext : klasa bazowa klasy definiującej mapę

OsobyEntities kontekst = new OsobyEntities())//dataGridView1.DataSource = kontekst.Lista;

// Osoby : nazwa bazy danych// Lista : nazwa tabeli

Page 52: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// Główne funkcje:AddObject() DeleteObject()AcceptAllChanges() SaveChanges()

ExecuteFunction<T>()GetObjectByKey()

// WłaściwościComandTimeout Connection

//ZdarzeniaSavingChanges

Page 53: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• tworzenie pliku .edmx

─ EdmGen.exe // z konsoli

─ Add New Item ADO.NET Entity Data Model Generate from database

// lub

─ Data Add New Data Source Database Entity Data Model EF Designer from Database

Page 54: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• wizualizacja

StudenciEntities kontekst = new StudenciEntities();//{ dataGridView1.DataSource = kontekst.Student;}// edycja DataGridView// . . . . . . . . . .private void dataGridView1_Validating( object sender, CancelEventArgs e){ kontekst.SaveChanges();}

EDM-DBF-1; 3.5

Page 55: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

• aktualizacja

// dodawanie rekorduStudent st = new Student(){ Album = 112233, Imię = "Ewa", Nazwisko = "Kolska", Semestr = 7};kontekst.Student.AddObject(st);kontekst.SaveChanges(); 

Page 56: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

// usuwanie rekorduint alb = 112233;var usu = (from st in kontekst.Student where st.Album == alb select st).FirstOrDefault() // ! if (usu != null){ kontekst.Student.DeleteObject(usu); kontekst.SaveChanges();}

EDM-DBF-2

Page 57: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

Design first

–Add New Item ADO.NET Entity Data Model Empty EF Designer Model

–przeciągnąć Entity

–zmienić nazwę, wprowadzić pola

–Generate Database from Model(New Connection)

–SQL : Execute

EDM-DF-1; 4.5

Page 58: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

Code First

Page 59: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,
Page 60: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

Przetwarzanie plików XML

       wyczytywanie i zapis plików XML

a) serializacja

using System.Xml.Serialization;

//

[Serializable]

public class Disk

{ public string Make ;

[NonSerialized]

public int something ;

public bool SATA;

}

Page 61: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

[Serializable]

public class Computer

{ public Disk disk = new Disk ( ) ;

public long Price ;

}

//

[Serializable]

public class Laptop : Computer

{

public double Weight;

}

Page 62: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

XmlSerializer xs =

new XmlSerializer(typeof (Laptop));

FileStream data = File.Create ("Lap.xml");

//

Laptop lap = new Laptop();

//

xs.Serialize(data , lap );

data.Close();

//

data = File.OpenRead("Lap.xml");

Laptop nn = (Laptop)xs.Deserialize(data);

Page 63: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

<?xml version="1.0"?>

<Laptop xmlns:xsi="http://www.w3.org/2001/

XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<disk>

<Make>NEC</Make>

<SATA>true</SATA>

</disk>

<Price>2127</Price>

<Weight>2</Weight>

</Laptop>

Page 64: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

- serializowane są składowe publiczne

- musi istnieć publiczny konstruktor bezargmentowy

- nazwy składowych => nazwy elementów XML

- atrybuty

[XmlAttribute("Producer")]

public string make;

//

[XmlIgnore]

//

Page 65: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

b) odczyt bez ładowania dokumentu XmlTextReader

//

XmlTextReader xtr =

new XmlTextReader("Lap.xml");

xtr.Read(); // kolejny element

Console.WriteLine

(

xtr.NodeType.ToString() +

" < " + xtr.Name + " > " +

xtr.Value

);XRD

Page 66: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

c) tworzenie pliku XML XmlTextWriter

XmlTextWriter xw =

new XmlTextWriter("NaPro.xml", Encoding.UTF8);

//

xw.WriteStartElement("car");

xw.WriteElementString("Name", CarList[i, 0]); xw.WriteValue(i);

xw.WriteEndElement();

//

xw.Flush();

xw.Close(); XWR

Page 67: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       analiza pliku XML XmlDocument

- podstawowe właściwości

ChildNodes // węzły podrzędne I stopnia

FirstChild // pierwszy węzeł podrzędny

Name // nazwa węzła

NodeType // typ węzła XmlNodeTypes

Value // wartość (test)

Attributes // atrybuty

InnerText // wartość węzła i wszystkich

// węzłów zagnieżdżonych

InnerXml // XML : wszystkie zagnieżdżone

OuterXml // XML : bieżący

// i wszystkie zagnieżdżone

Page 68: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

- odnajdywanie elementów

GetElementByTagName => XmlNodeList

XmlDocument xdoc = new XmlDocument();

xdoc.Load("FileName");

string TagName = "City"; // <City> Oslo </City>

XmlNodeList xlist =

xdoc.GetElementsByTagName(TagName);

foreach (XmlNode xn in xlist)

{ xn. .... }

string st = xn.FirstChild.Value;

// albo

st = xlist[0].FirstChild.Value; XDoc1

Page 69: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

- dopisywanie i usuwanie elementów

xdoc = ..... // XmlDocument

parent = ..... // from XmlNodeList

XmlNode newCar = xdoc.CreateElement("car");

parent.AppendChild(newCar);

XmlNode newName = xdoc.CreateElement("Name");

newCar.AppendChild(newName);

newName.AppendChild ( xdoc.CreateTextNode("Liana") );

Page 70: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

xdoc = ..... // XmlDocument

parent = ..... // from XmlNodeList

child = ...... // one of parent’s children

//

parent.RemoveChild(child);

// and all its children

//

xdoc.Save("FileName");

XDoc2

Page 71: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

- wyrażenia XPath

<Order>

<Client>

<Name>John Brown</Name>

</Client>

<Items>

<Item>

<Name>DVD Recorder</Name>

<Price>142.99</Price>

</Item>

</Items>

</Order>

Page 72: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

XmlDocument doc = new XmlDocument();

doc.Load("orders.xml");

//

XmlNodeList nodes =

doc.SelectNodes("/Order/Items/Item/Name");

//

foreach (XmlNode node in nodes)

{

Console.WriteLine(node.InnerText);

}

Page 73: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       LINQ to XML

- tworzenie pliku XML z kolekcji

XDocument xml = new XDocument(

new XDeclaration("1.0", "utf-8", "yes"),

new XElement("ListaOsob",

from osoba in listaOsob // list<Osoba>

orderby osoba.Wiek

select new XElement("Osoba",

new XAttribute("Id", osoba.Id),

new XElement("Nazwisko", osoba.Nazwisko),

new XElement("Wiek", osoba.Wiek)))

Page 74: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

- pobieranie danych z pliku XML

XDocument xml = XDocument.Load("Osoby.xml");

//

IEnumerable<string> listaOsobPelnoletnich =

from osoba in xml.Descendants("Osoba")

where int.Parse(osoba.Element("Wiek").Value) >= 18

orderby osoba.Element("Nazwisko").Value

select osoba.Element("Nazwisko").Value;

LinqXML

Page 75: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

       analiza poprawności pliku XML

- składnia XML

XmlDocument xdoc = new XmlDocument();

xdoc.Load("FileName"); // Exception

- wzorzec pliku XML => *.xsd

DataSet ds = ....

ds.WriteXmlSchema(FileName);

//

xsd.exe file.xml => file.xsd

XRD

Page 76: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

XmlSchemaSet sc = new XmlSchemaSet();

sc.Add(null, "Cars.xsd");

XmlReaderSettings settings = new XmlReaderSettings();

settings.ValidationType = ValidationType.Schema;

settings.Schemas = sc;

XmlReader reader = XmlReader.Create("Cars.xml", settings);

try

{ while (reader.Read()) { } } // read all

catch (XmlSchemaValidationException err)

{...} Veri

Page 77: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

   korzystanie z serwisów internetowych ( Web Service )

- Project / Add Web Reference

- język WSDL

<wsdl:definitions targetNamespace=

"http://terraserver-usa.com/terraserver/">

<s:element name="ConvertLonLatPtToNearestPlace"><s:complexType>

<s:sequence>

<s:element minOccurs="1" maxOccurs="1" name="point" type="tns:LonLatPt"/>

</s:sequence>

</s:complexType>

</s:element>

Page 78: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

<s:complexType name="LonLatPt">

<s:sequence>

<s:element minOccurs="1" maxOccurs="1" name="Lon" type="s:double"/>

<s:element minOccurs="1"

maxOccurs="1" name="Lat" type="s:double"/>

</s:sequence>

</s:complexType>

Page 79: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

<s:element name="ConvertLonLatPtToNearestPlaceResponse">

<s:complexType>

<s:sequence>

<s:element minOccurs="0" maxOccurs="1"

name="ConvertLonLatPtToNearestPlaceResult"

type="s:string"/>

</s:sequence>

</s:complexType>

</s:element>

. . . . . . . . . . . . .

Page 80: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

- protokół SOAP

<soap:Envelope xmlns:xsi="http://www.w3.org ....

<soap:Body>

<GetWeather

xmlns="http://www.webserviceX.NET">

<CityName>string</CityName>

<CountryName>string</CountryName>

</GetWeather>

</soap:Body>

</soap:Envelope>

Page 81: ADO.NET (  A ctive  D ata  O bjects . NET) ·    tworzenie i przetwarzanie lokalnych,

net.webservicex.www.GlobalWeather gw =

new net.webservicex.www.GlobalWeather( );

//

string panstwo = " .... ";

//

string Miasta = gw.GetCitiesByCountry(panstwo);

// pobranie nazwy miasta z tekstu XML

string Pogoda = gw.GetWeather(miasto, panstwo);

// pobranie danych pogodowych z tekstu XML

WebSer