Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

YOUR LOGO ADO.NET - Práca s databázou. YOUR LOGO ADO.NET  ADO.NET představuje soubor tříd pro přístup k datům v technologii.NET.

Podobné prezentace


Prezentace na téma: "YOUR LOGO ADO.NET - Práca s databázou. YOUR LOGO ADO.NET  ADO.NET představuje soubor tříd pro přístup k datům v technologii.NET."— Transkript prezentace:

1 YOUR LOGO ADO.NET - Práca s databázou

2 YOUR LOGO ADO.NET  ADO.NET představuje soubor tříd pro přístup k datům v technologii.NET

3 YOUR LOGO ADO.NET a.NET Framework Microsoft.NET Framework Common Language Runtime Base Classes Web ServicesUser Interface Data and XML ADO.NET XML...

4 YOUR LOGO Základní pojmy a architektura  Základní jmenné prostory -System.Data – třídy reprezentující obecný přístup k datům, bez ohledu na konktrétní databázi ( DataSet, DataTable, Constraint ) -System.Data.(OleDb|Oracle|SqlClient|Odbc ) – třídy poskytovatelů dat (data providers) -System.Data.Common -System.Data.SqlTypes, System.Data.Sql – specifické třídy pro Microsft SQL Server

5 YOUR LOGO.NET Data Providers Hierarchie System.Data.OleDb.SqlClient OleDbCommand OleDbConnection OleDbDataReader OleDbDataAdapter SqlCommand SqlConnection SqlDataReader SqlDataAdapter

6 YOUR LOGO Třídy poskytovatelů dat  jsou vždy odvozeny od jedné základní třídy a implementují společné rozhraní podle toho, co mají dělat  každá třída má čtyři verze, jejichž jména začínají jménem příslušného poskytovatele dat  např. (Sql|OleDB|Oracle|ODBC)Connection implementují rozhraní IDbConnection a dědí od třídy DbConnection, umožňují se připojit k databázi

7 YOUR LOGO Třídy poskytovatelů

8 YOUR LOGO Database Connection  Connection  třídy representující spojení s databází  spojení je representována řetězcem (connection string), který se předá konstruktoru nebo nastaví ve vlastnosti ConnectionString  příklad řetězce : “server = (local); integrated security = SSPI; database=Northwind” SqlConnection conn= new SqlConnection( "server=localhost;database=mojeDatabaz e;uid=sa;pwd=");

9 YOUR LOGO Database Connection  vlastní spojení se otevře metodou Open  spojení je potřeba nakonec zavřít metodou Close, ideální je následující schéma použití : try { using (SqlConnection c = newSqlConnection(s)) { c.Open(); … ; c.Close() } } catch (SqlException) {…}

10 YOUR LOGO RECORD SET  Record set v ADO.NET neexistuje, existoval v ADO  Nahradili ho: -DataReader -DataAdapter -DataSet

11 YOUR LOGO DataReader  Umožňuje použití souboru záznamů, které jsou výsledkem SQL dotazu.  Chová se stejně jako forward-only server-side kursor v klasickém ADO

12 YOUR LOGO Príklad Con.Open(); OleDBCommand = new OleDBCommand(“SELECT * FROM Studenti, con”) OleDBDataReader dtr = cmd.ExecuteReader(); While dtr.Read() { listBox.Items.Add(dtr(“meno”)) } … Con.Close();

13 YOUR LOGO DataSet a DataAdapter  DataSet a DataAdapter, umožňují přenesení dat do lokální cache klienta (tím může být widowsový nebo i webový formulář) a práci s těmito daty i ve stavu, kdy je přerušeno spojení s databází.

14 YOUR LOGO DataSet  DataSet je výsledkem úsilí spojit klasické ADO s XML datovým formátem  DataSet je třída, která se nestará o spojení s databází nebo o SQL dotazy.  Jedná se o klientský nástroj pro zpracování dat.

15 YOUR LOGO

16 Schema objektu dataTable

17 YOUR LOGO Naplnenie DataSetu  Dva spôsoby: -Použití objektu DataAdapter, který vrací výsledek SQL dotazu ve formě XML. -Pracovat přímo s XML. DataSet má metody s jejichž pomocí umí číst a zapisovat XML data a schémata.

18 YOUR LOGO IDataAdapter

19 YOUR LOGO DataAdapter  adaptér je třída představující spojení do databáze a čtyři příkazy -SelectCommand – slouží k vybrání řádků z databáze -UpdateCommand – ukládání změn v řádcích -InsertCommand – ukládání nových řádků -DeleteCommand – mazání řádků  má metody - Fill, která použije SelectCommand k naplnění daty tabulky v DataSet u -Update, která zavolá příslušné příkazy na řádcích, aby se změny projevily v databázi

20 YOUR LOGO DataAdapter  příkazy je možno nastavit ručně nebo pomocí třídy providera CommandBuilder  CommandBuilder nastaví ostatní příkazy pomocí již nastaveného SelectCommand u  SelectCommand musí vracet alespoň jeden primární klíč nebo alespoň sloupec s UniqueConstraint  pokud změníte nějaký parametr SelectCommand u musíte metodou RefreshSchema přegenerovat CommandBuilder  metody GetUpdateCommand ap. – vrátí příslušný příkaz

21 YOUR LOGO Naplenenie cez DataAdapter OleDbConnection con = new OleDbConnection(conStr); OleDbCommand cmd = new OleDbCommand(“SELECT * FROM Studenti”,con); OleDbDataAdapter da = new OleDbDataAdapter(); Da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds,”Studenti”);

22 YOUR LOGO Iná možnosť da.Fill() SqlDataAdapter adapter = new SqlDataAdapter( "select * from zamestnanci", "server=localhost;database=mojeDatabaze;uid=sa;pwd="); DataSet ds = new DataSet(); adapter.Fill(ds,"zamestnanci");

23 YOUR LOGO Update SqlDataAdapter adapter = new SqlDataAdapter("select * from zamestnanci", "server=localhost;database=mojeDatabaze;uid=sa;pwd="); DataSet ds = new DataSet(); adapter.Fill(ds,"zamestnanci"); SqlCommandBuilder stavitel = new SqlCommandBuilder(adapter); //Vložen í nov é ho ř á dku DataTable tabulka = ds.Tables["zamestnanci"]; DataRow novy_radek = tabulka.NewRow(); novy_radek["jmeno"] = "Jan Okoun"; novy_radek["pozice"] = "sef"; novy_radek["adresa"] = "Nekde 12"; novy_radek["telefon"] = "555685"; novy_radek["plat"] = "45000"; tabulka.Rows.Add(novy_radek); //Postoupen í změněných ř á dek zp á tky do datab á ze adapter.Update(ds);

24 YOUR LOGO Príklad použitia DataView SqlDataAdapter adapter = new SqlDataAdapter( "select * from zamestnanci", "server=localhost;database=mojeDatabaze;uid=sa;pwd="); DataSetds= new DataSet(); adapter.Fill(ds,"zamestnanci"); DataView pohled = new DataView(ds.Tables["zamestnanci"]); pohled.Sort = "jmeno"; pohled.RowFilter = "plat > 20000"; DataGrid.DataSource = pohled; DataGrid.DataBind(); //podla zmeny pohled.RowStateFilter = DataViewRowState.Deleted;

25 YOUR LOGO Sql query  Sql príkaz: -SELECT * FROM uzivatele WHERE jmeno=’Maurenc’

26 YOUR LOGO Chybná autentifikace – SQL poison bool OveritUzivatele(string login,string heslo) { SqlConnection prip = new SqlConnection ("server=localhost;database=mojeDatabaze;uid=sa;pwd="); try { prip.Open(); SqlCommand prikaz = new SqlCommand ("SELECT count(*) FROM uzivatele WHERE login='"+login+"'"+ "AND heslo='"+heslo+"'",prip); int pocet = (int)prikaz.ExecuteScalar(); return (pocet > 0); } catch(SqlException) { return false; } finally { prip.Close(); } }

27 YOUR LOGO Možnosti SQl poisoning  SELECT count(*) FROM uzivatele WHERE login='Admin' AND heslo='cokoliv' OR 1=1;--‚  Login: cokoliv Heslo: x'; INSERT INTO uzivatele VALUES('Hacker','heslo');--  Login: cokoliv Heslo: x'; DROP TABLE uzivatele;--  Login: cokoliv Heslo: x'; SHUTDOWN WITH NOWAIT;--

28 YOUR LOGO Parametrizované príkazy  Existujú spôsoby parsovania ako by bolo možné SQL injection predísť  Odporučané je ale používať parametrizované príkazy

29 YOUR LOGO bool OveritUzivatele(string login,string heslo) { SqlConnection prip = new SqlConnection ("server=localhost;database=mojeDatabaze;uid=sa;pwd="); try { prip.Open(); SqlCommand prikaz = new SqlCommand ("SELECT count(*) FROM uzivatele WHERE login=@login AND"+ "heslo=@heslo",prip); prikaz.Parameters.Add("@login",SqlDbType.VarChar); prikaz.Parameters.Add("@heslo",SqlDbType.VarChar); prikaz.Parameters["@login"].Value = login; prikaz.Parameters["@heslo"].Value = heslo; int pocet = (int)prikaz.ExecuteScalar(); return (pocet > 0); } catch(SqlException) { return false; } finally { prip.Close(); } }

30 YOUR LOGO bool OveritUzivatele(string login,string heslo) { OleDbConnection prip = new OleDbConnection ("provider=sqloledb;server=localhost;database="+ "mojeDatabaze;uid=sa;pwd="); try { prip.Open(); OleDbCommand prikaz = new OleDbCommand ("SELECT count(*) FROM uzivatele WHERE login=? AND"+ "heslo=?",prip); prikaz.Parameters.Add("@login",OleDbType.VarChar); prikaz.Parameters.Add("@heslo",OleDbType.VarChar); prikaz.Parameters["@login"].Value = login; prikaz.Parameters["@heslo"].Value = heslo; int pocet = (int)prikaz.ExecuteScalar(); return (pocet > 0); } catch(OleDbException) { return false; } finally { prip.Close(); } }

31 YOUR LOGO Uložené procedúry CREATE PROCEDURE proc_OveritUzivatele, @login varchar(30 ), @heslo varchar(30 ), @pocet int OUTPUT AS SELECT @pocet = count(*) FROM uzivatele WHERE login=@login AND heslo=@heslo GO

32 YOUR LOGO bool OveritUzivatele(string login,string heslo) { SqlConnection prip = newSqlConnection ("server=localhost;database=mojeDatabaze;uid=sa;pwd="); try { prip.Open(); SqlCommand prikaz = new SqlCommand("proc_OveritUzivatele",prip); prikaz.CommandType = CommandType.StoredProcedure; prikaz.Parameters.Add("@login",login); prikaz.Parameters.Add("@heslo",heslo); SqlParameter pocet = prikaz.Parameters.Add ("@pocet",SqlDbType.Int); pocet.Direction = ParameterDirection.Output; prikaz.ExecuteScalar(); return ((int)pocet.Value > 0); } catch(SqlException) { return false; } finally { prip.Close(); } }


Stáhnout ppt "YOUR LOGO ADO.NET - Práca s databázou. YOUR LOGO ADO.NET  ADO.NET představuje soubor tříd pro přístup k datům v technologii.NET."

Podobné prezentace


Reklamy Google