ado.net ( a ctive d ata o bjects . net) · tworzenie i przetwarzanie lokalnych,
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 PresentationTRANSCRIPT
![Page 1: ADO.NET ( A ctive D ata O bjects . NET) · tworzenie i przetwarzanie lokalnych,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/1.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/2.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/3.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/4.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/5.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/6.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/7.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/8.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/9.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/10.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/11.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/12.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/13.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/14.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/15.jpg)
▪ 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/16.jpg)
▪ 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/17.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/18.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/19.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/20.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/21.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/22.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/23.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/24.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/25.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/26.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/27.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/28.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/29.jpg)
- 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/30.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/31.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/32.jpg)
- 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/33.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/34.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/35.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/36.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/37.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/38.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/39.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/40.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/41.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/42.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/43.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/44.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/45.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/46.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/47.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/48.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/49.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/50.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/51.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/52.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/53.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/54.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/55.jpg)
• 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/56.jpg)
// 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/57.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/58.jpg)
Code First
![Page 59: ADO.NET ( A ctive D ata O bjects . NET) · tworzenie i przetwarzanie lokalnych,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/59.jpg)
![Page 60: ADO.NET ( A ctive D ata O bjects . NET) · tworzenie i przetwarzanie lokalnych,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/60.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/61.jpg)
[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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/62.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/63.jpg)
<?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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/64.jpg)
- 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/65.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/66.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/67.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/68.jpg)
- 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/69.jpg)
- 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/70.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/71.jpg)
- 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/72.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/73.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/74.jpg)
- 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/75.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/76.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/77.jpg)
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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/78.jpg)
<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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/79.jpg)
<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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/80.jpg)
- 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,](https://reader036.vdocuments.pub/reader036/viewer/2022062518/56814099550346895dac3851/html5/thumbnails/81.jpg)
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