ADO.NET. Obiektowy dostęp do danych. Przygotował Jakub Światły



Podobne dokumenty
Bazy danych 2. Wykład 6

Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy

Wykład 12. ADO.NET model bezpołączeniowy

Wykład 4. Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy. Bazy danych 2

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

z użyciem kontrolek ASP.NET

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Oracle11g: Wprowadzenie do SQL

ZAPOZNANIE SIĘ ZE SPOSOBEM PRZECHOWYWANIA

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Log. Ponieważ usługa ma ograniczony interfejs użytkownika, powinna posługiwać się LOG iem Dodajemy do projektu obiekt EventLog

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Programowanie obiektowe

Manipulowanie danymi przy użyciu DAO

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Database Connectivity

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

ADO.NET to zestaw klas umożliwiających odczyt i obróbkę danych z różnych źródeł zgodny z platformą.net i posiadający wszystkie jej cechy:

Technologia informacyjna

Język SQL, zajęcia nr 1

Systemy GIS Tworzenie zapytań w bazach danych

Projektowanie aplikacji z bazami danych

Microsoft SQL Server Podstawy T-SQL

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Oracle PL/SQL. Paweł Rajba.

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Oracle PL/SQL. Paweł Rajba.

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Podstawy programowania III WYKŁAD 2

Proces ETL MS SQL Server Integration Services (SSIS)

1 Instalowanie i uaktualnianie serwera SQL Server

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Programowanie MorphX Ax

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Dostęp do baz danych w ASP.NET.

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Paweł Rajba

Kostki OLAP i język MDX

Projektowanie systemów baz danych

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Relacyjne bazy danych a XML

Współpraca aplikacji WWW z bazami danych

PHP: bazy danych, SQL, AJAX i JSON

Leonard G. Lobel Eric D. Boyd. Azure SQL Database Krok po kroku. Microsoft. Przekład: Marek Włodarz. APN Promise, Warszawa 2014

Bazy Danych i Usługi Sieciowe

Bazy danych i usługi sieciowe

Programowanie w Ruby

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Jerzy Nawrocki, Wprowadzenie do informatyki

Projektowanie aplikacji bazodanowych w.net

Ref. 7 - Język SQL - polecenia DDL i DML

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Spis treści. Przedmowa

Informatyka I BAZY DANYCH. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2017

'otwarcie i ustawienie zbioru rekordow na podstawie tabeli Studenci Set rs = CurrentDb.OpenRecordset("Studenci", dbopensnapshot)

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Część I Tworzenie baz danych SQL Server na potrzeby przechowywania danych

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Gdzie jest moja tabela?

Kurs programowania aplikacji bazodanowych

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Relacyjne bazy danych. Podstawy SQL

Wykład 10 Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy

Część I Dostęp do danych oraz moŝliwości programowe (silnik bazy danych)

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Praca z bazą danych. Rysunek 1. Projekt tabeli UZYTKOWNIK bazy KURSY

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

LITERATURA. C. J. Date; Wprowadzenie do systemów baz danych WNT Warszawa 2000 ( seria Klasyka Informatyki )

Wykład 05 Bazy danych

Programowanie w MS Visual Studio 2005 z wykorzystaniem MS SQL Server 2005

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Podejście obiektowe do relacyjnych baz danych Hibernate.

JDBC w LoXiMie. Interfejs Java Database Connectivity dla systemu LoXiM. Adam Michalik 2008

Bazy danych. Dr inż. Paweł Kasprowski

15. Funkcje i procedury składowane PL/SQL

XML w bazach danych i bezpieczeństwie

SZKOLENIE: Administrator baz danych. Cel szkolenia

Narzędzia 4. dr inż. Tadeusz Jeleniewski

Leszek Stasiak Zastosowanie technologii LINQ w

Kurs programowania aplikacji bazodanowych

DMX DMX DMX DMX: CREATE MINING STRUCTURE. Tadeusz Pankowski

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Transkrypt:

ADO.NET Obiektowy dostęp do danych Przygotował Jakub Światły

Plan prezentacji Technologie dostępu do danych Cele i założenia ADO.NET Praca na danych podłączonych Praca na danych odłączonych Synchronizacja Obsługa XML Zastosowanie

Microsoft Data Access Components źródło: http://en.wikipedia.org/wiki/microsoft_data_access_components

Open Database Connectivity Standardowe API do obsługi relacyjnych baz danych Niezależność od SZBD, języka, systemu operacyjnego Stara technologia dopracowane sterowniki Pierwsze podejścia obiektowe: DAO (przez JET) RDO (bez JET)

OLE DB Krok w stronę COM Rowset po prostu zbiór n-tek (wynik zapytania, tabela, widok, xls, tekst, rejestr) Wspólne mechanizmy zapytań, indeksowania, kursorów, bez konwersji danych

ActiveX Data Objects Nakładka na OLE DB, bez wskaźników, zarządzania pamięcią i czasem życia, gotowa do użycia w VB Recordset kursor zdolny pracować z odłączonymi danymi i samodzielnie zapisywać zmiany do bazy Abstrakcja od stanu danych (podłączone czy odłączone)

Po co znowu coś innego? Java wyparła COM Internet wymaga odłączonych danych Konieczna kontrola i elastyczność operacji UPDATE Popularność XML

ADO.NET - założenia Platforma.NET Silne rozgraniczenie danych podłączonych i odłączonych Wygodne, ale wysoce konfigurowalne przejścia między tymi stanami Solidna obsługa XML Zalety poprzednich wersji

Architektura źródło: http://www.dotnetforce.com

Architektura 2 źródło: http://www.vbdotnetheaven.com/

Dane Podłączone Połączenie Connection Transaction Odpytywanie bazy danych Command DataReader Parameter DataAdapter

Dostawcy danych w.net Abstrakcyjny OleDb przestrzeń System.Data.OleDb Przedrostek OleDb MS SQL Server Przestrzeń System.Data.SqlClient Przedrostek Sql Abstrakcyjny ODBC Oracle SQL XML.NET

Połączenie string connectionstring = Provider=[MSDAORA SQLOLEDB...]; Data Source=MyServer; User Id =kuba; Password=hasło ; Connection cn = new OleDbConnection (connectionstring); cn.open(); cn.close();

Połączenie Pula połączeń cn.createcommand(); cn.begintransaction(); cn.getoledbschematable(...);

Odpytywanie bazy Command cmd = cn.createcommand(); cmd.commandtext = SELECT pleple FROM bleble ; cmd.commandtext = [schuser]. [dropuser] ; cmd.commandtype = Text StoredProcedure ; cmd.executenonquery(); cmd.executescalar(); DataReader reader = cmd.executereader(); cmd.dispose();

DataReader rdr.read(); rdr[ email ]; Lepiej int ordinal = rdr.getordinal( email ); rdr.getstring(ordinal); rdr.nextresult() - batch queries (następny wynik wierszowy!) rdr.close();

Co będzie jak nie zamkniemy rdr i chcemy zrobić coś nowego? Połączenie jest zajęte. Jakie były rozwiązania? Chronologicznie: UBSQL wyjątek DAO / JET niejawne nowe połączenie RDO wyjątek ADO niejawne nowe połączenie ADO.NET wyjątek

Parametry cmd.parameters.add(new Parameter(SqlDataType.Int32, @userid, 15); Ustawianie kierunków Odczytywanie wyników (po przeczytaniu wszystkiego z rdr)

Odłączanie danych string strsql = SELECT * FROM Users ; string strconn = ; DataAdapter da = new OleDbDataAdapter(strSQL, strconn); DataSet ds = new DataSet(); da.fill(ds, Users );

DataAdapter źródło: http://conferences.codegear.com/

DataAdapter Jeśli nie podamy nazwy tabeli Table, Table1.. A jeśli wywołamy ds.fill(da) raz po razie? Problem kluczy Jeśli chcemy sami zarządzać połączeniem: da.selectcommand.connection = cn; cn.open(); ds.fill(da); cn.close();

Stronicowanie wyników int startingrow = 50; int rowstoretreive = 10; int rowsretrieved = da.fill(ds, startingrow, rowstoretrieve, Users ); Niby zgrabnie, ale co jest pod spodem?

Odwzorowanie nazw DataTableMapping tblmap = da.tablemappings.add( Table, Users ); DataColumnMapping colmap = tblmap.collumnmappings.add( UID, UserId ); da.fillschema(ds,schematype.source, Users ); nazwy, typy, PK, AllowDbNull,Length Słaba wydajność

Więzy DataTable tbl = ds.tables.add( Users ); tbl.constraints.add(new UniqueConstraint(tbl.Columns[ UserI d ])); tbl.constraints.add(new ForeignKeyConstraint(ds.Tables[ Rol es ].Columns[ RoleId ],tbl.columns[ RoleId ])); tbl.primarykey = new DataColumn[] {tbl.columns[ UserId ]};

Kolumny wyliczane DataColumn col = tbl.columns.add( RowId, typeof(int)); col.autoincrement = true; col.autoincrementseed = 1; col.autoincrementstep = 1; tbl.columns.add( ItemTotal, typeof(decimal), Quantity * UnitPrice );

Wstawianie wiersza DataRow newrow = ds.tables[ Users ].NewRow(); row[ UserName ] = kuba ; ds.tables[ Users ].Rows.Add(newRow) ; ds.tables[ Users ].LoadDataRow(new object[] { kuba, hasło, 2}, false); //true Unmodified)

Modyfikacja wiersza DataRow row = ds.tables[ Users ].Rows.Find( kuba ); row[ UserName ] = Kuba ; cache: row.beginedit(); row.[ UserName ] = Kuba ; row.endedit(); //row.canceledit();

Usuwanie i kasowanie Usunięcie z bazy DataRow row = ds.tables[ Users ].Rows.Find( kuba ); row.delete(); Usunięcie obiektu ds.tables[ Users ].Remove(row);

Stan wiersza row.rowstate wartości: (enum DataRowState) Unchanged Detached Added Modified Deleted

Wersje pól wiersza row( UserId, DataRowVersion.Current)); Current Original Proposed Default row( UserId ) == row( UserId, DataRowVersion.Default);

Relacje między tabelami DataRelation rel = new DataRelation( RolesUsers, ds.tables[ Roles ].Columns[ RoleId ], ds.tables[ Users ].Columns[ RoleId ]); ds.relationships.add(rel); foreach(datarow userrow in rolerow.getchildrows( RolesUsers )) { } userrow.getparentrow( RolesUsers ) [ RoleName ]; ds.tables[ Users ].Columns.Add( Role, typeof(string), Parent( RolesUsers ).RoleName);

Relacje między tabelami ForeignKeyConstraint.UpdateRule ForeignKeyConstraint.DeleteRule { Cascade, None, SetDefault, SetNull } Wiele do wielu trzeba zrobić dwie relacje z tabelą łączącą relacje między tabelami z różnych źródeł walidacja

Wyszukiwanie wierszy - PK DataRow row = ds.tables[ Users ].Rows.Find( kuba ); object[] criteria = new object[] {123, 234}; DataRow row = ds.tables[ Users ].Rows.Find(criteria);

Wyszukiwanie wierszy - WHERE string strcriteria = RoleName = 'user' AND + (AccountCreated > #01/01/2003# + OR City LIKE 'Nowy %') ); DataRow[] arows = tbl.select(strcriteria); Uwzględnianie stanu wierszy

Sortowanie ORDER BY string strsortorder = UserId DESC ; arows = tbl.select(strcriteria, strsortorder);

DataView DataView vue = DataView(tbl); vue.rowfilter = Country = 'Spain' ; vue.getenumerator(); vue.sort = Country DataRowView[] arows = vue.findrows( Spain );

Silnie typowany DataSet Visual Studio może generować klasy dziedziczące po DataSet, DataTable, DataRow Właściwości ds takie jak nazwy tabel Właściwości wierszy takie jak nazwy kolumn Nazwane metody np. do tworzenia wierszy, ustawiania nulli, pobierania wierszy z relacji Można napisać bardziej efektywny kod bez typowania, ale różnice niewielkie

Synchronizacja DataSet DataAdapter da = new OleDbDataAdapter(strConn); da.updatecommand =...; da.deletecommand =...; da.insertcommand =...; da.update(tbl);

Obiekty Command Procedury składowane albo tekst Mają kolekcję parametrów (Parameter), które za pomocą właściwości SourceColumn i SourceVersion są przybite do odpowiednich kolumn w tabeli i odpowiednich wersji wartości. Insert potrzebuje wartości aktualnych Delete wartości oryginalnych Update zarówno aktualnych jak i oryginalnych

Metoda Update Iteruje po wierszach Wybiera polecenie odpowiednio do stanu wiersza Ustawia wartości parametrów Próbuje wykonać polecenie i rejestruje ewentualne błędy

CommandBuilder Jeżeli polecenie Select: Zwraca wyniki z jednej tabeli Zwraca kolumnę, która jest kluczem głownym Wtedy CommandBuilder może wygenerować domyślne polecenia Update, Insert, Delete, na podstawie metadanych z wyników polecenia Select. Raczej unikać

Współbieżność - strategie Ostatni wygrywa WHERE bazuje tylko na PK CommandBuilder nie pomoże Pierwszy wygrywa WHERE zawiera wszystkie kolumny (oryginalne wartości) generowana przez CommandBuilder Rozłączne zmiany wiersza WHERE zawiera kolumny zmodyfikowane można napisać samemu, ale to dosyć trudne

Problem z więzami Trzeba o tym pomyśleć samemu Wstawiać ojców Wstawiać dzieci Zmieniać ojców Zmieniać dzieci Usuwać dzieci Usuwać ojców Pomaga Update(DataRow[]) w połączeniu z DataTable.Select(,,DataViewRowState)

Obsługa XML Konwersja DataSet XML i odwrotnie Wypisywanie i czytanie schematu XSD, można także wywnioskować schemat dynamicznie Na tworzony schemat XML można wpływać właściwościami DataSet.DataSetName, DataColumn.ColumnName, DataColumn.ColumnMapping (Attribute, Element, Hidden), DataRelation.Nested

XML Pliki różnicowe XmlDataDocument synchronizuje DataSet i dokument XML SQL XML.NET do obsługi interfejsu XML MS SQL Server (SELECT przez Xpath, UPDATE przez pliki różnicowe). Zastosowania: serializacja, XSLT

Podsumowanie DataSet jako pamięć podręczna Bezstanowość HTTP Do czego to się może przydać? Pytania