ADO.NET Objekt Command (online scenář)

Podobné dokumenty
Programování v jazyku C# II. 5.kapitola

Jazyk C# - přístup k datům

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

C# - Databáze úvod, ADO.NET. Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí

Jazyk SQL databáze SQLite. připravil ing. petr polách

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databázové systémy. Cvičení 6: SQL

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Databáze I. 5. přednáška. Helena Palovská

KIV/ZIS cvičení 6. Tomáš Potužák

KIV/ZIS cvičení 5. Tomáš Potužák

8.2 Používání a tvorba databází

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Návrh a tvorba WWW stránek 1/14. PHP a databáze

PHP a Large Objecty v PostgreSQL

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Text úlohy. Systémový katalog (DICTIONARY):

6. blok část B Vnořené dotazy

Úvod do databázových systémů

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

SQL - trigger, Databázové modelování

Sada 1 - PHP. 14. Úvod do jazyka SQL

Tvorba aplikací v Oracle Application Express

Databáze SQL SELECT. David Hoksza

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Semináˇr Java X JDBC Semináˇr Java X p.1/25

Databázové systémy a SQL

Databázové systémy a SQL

Databáze I. 1. přednáška. Helena Palovská

Střední odborná škola a Střední odborné učiliště, Hořovice

Databáze II. 1. přednáška. Helena Palovská

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Databázové systémy úvod

Použití databází na Webu

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Jaku b Su ch ý 1

Základní přehled SQL příkazů

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Databázové systémy Cvičení 5.2

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Jazyk C# - přístup k datům

Stopařův průvodce po ADO.NET a LINQ aneb Foxařův průvodce po práci s daty v.net Milan Kosina

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 4

Základy databází. O autorech 17 PRVNÍ ČÁST. KAPITOLA 1 Začínáme 19

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Bezpečnost a bezpečné programování

Jazyk C# - přístup k datům

O Apache Derby detailněji. Hynek Mlnařík

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ

Informační systémy ve zdravotnictví. 6. cvičení

APS mini Plus.Home. Návod na rychlou instalaci

Databázové systémy I

METODICKÝ POKYN PŘIDÁNÍ A PŘEHRÁNÍ VIDEA V PREZENTACI

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení

Administrace Oracle. Práva a role, audit

5. POČÍTAČOVÉ CVIČENÍ

Databázové systémy trocha teorie

Ukázka knihy z internetového knihkupectví

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Nové jazykové brány do Caché. Daniel Kutáč

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

Návod k aplikaci SQL Tools v.2.3

Verzování a publikace dat na webu za pomoci PostgreSQL

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

ČSOB Business Connector instalační příručka

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Databázové a informační systémy

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Střední odborná škola a Střední odborné učiliště, Hořovice

Transakce a zamykání. Administrace MS SQL Serveru (NDBI039) Pavel Hryzlík

Oracle XML DB. Tomáš Nykodým

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

Struktura pamětí a procesů v DB Oracle. Radek Strnad

Střední odborná škola a Střední odborné učiliště, Hořovice

Téma 8: Konfigurace počítačů se systémem Windows 7 IV

ANALYSIS SERVICES PROJEKT VYTVOŘENÍ PROJEKTU A DATOVÉ KOSTKY

4. lekce Přístup k databázi z vyššího programovacího jazyka

Úvod do databázových systémů

PASPORT MÍSTNÍCH KOMUNIKACÍ - Obec Deštné - ZIMNÍ ÚDRŽBA

Seznámení s knihovnou ADO.NET

ČSOB Business Connector Instalační příručka

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Popis logování v aplikačním serveru

VYÚČTOVÁNÍ DANĚ ZE ZÁVISLÉ ČINNOSTI, SRÁŽKOVÉ DAŃE

Transkript:

ADO.NET Objekt Command (online scenář) Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí

Objekt Command Tento objekt se používá k vykonání jednoho dotazu na DB. Tento dotaz může provést akce jako vytvoření, přidání, získání, smazání nebo update záznamů v DB. Jednou z hlavních funkcí objektu Command je jeho schopnost spolupracovat s uloženými dotazy a procedurami včetně předávání parametrů těmto procedurám. Existují různé druhy objektů Command v závislosti na providerovi DB připojení (OleDbCommand, OdbcCommand, SqlCommand, OracleCommand) My budeme využívat objekt SqlCommand pro datové úložiště SQL server

SqlCommand properties: Properties & Methods CommandText CommandType Connection CommandTimeout Parameters Description Vykonává příkazy, které vrací řádky. ExecuteReader nemusí mít žádoucí efekt pro vykonávání příkazů jako například SQL SET. Stored procedure, TableDirect, Text Nastavuje SqlConnection (get,set) pro tento instanci SqlCommand Vrací nebo nastavuje časovou hodnotu, za kterou končí pokus o provedení příkazu a je vygenerována chyba Čtení SqlParametrCollection Transaction Čte nebo nastavuje SqlTransaction skrze kterou je SqlCommand vykonán

SqlCommand - metody vykonávající dotazy nad DB úložištěm: Item ExecuteReader ExecuteNonQuery ExecuteScalar Description Vykonává příkazy, které vrací řádky ve formě objektu DataReader. ExecuteReader nemusí mít žádoucí efekt pro vykonávání příkazů jako například SQL SET. Provede vykonání příkazů SQL INSERT, DELETE, UPDATE, a SET. Slouží k získání jediné hodnoty, například sumarizační hodnoty z DB.

Executing Single Value Returning Query SELECT count(*) FROM tbproducts Použití ExecuteScalar vrátí první hodnotu z prvního řádku vráceného resultsetu Vrácená hodnota je typu System.Object a je nutná přetypovat Volání: Cmd.ExecuteScalar();

Executing Row Returning Resultset SELECT * FROM tbproducts Použití ExecuteReader vrátí objekt DataReader Vrácená objekt je read-only a forward only set Volání: Cmd.ExecuteReader(); Jednoduché a rychlé

Objekt DataReader Objekt DataReader se využívá k načtení výsledku dotazu, který vrací jeden nebo více záznamů z datového úložiště Používá se v připojených aplikacích. Objekt DataReader je standardně ukončován před ukončením objektu Connection např. takto: finally { if (lreader!= null &&!lreader.isclosed) // kontrola jestli je objekt inicializován nebo na to zda objekt není zavřený { lreader.close(); } if (lconnection!= null &&!lconnection.state.equals(connectionstate.closed)) { lconnection.close(); } }

DataReader: Properties & Methods Read NextResult isdbnull GetOrdinal GetValue Get<datatype> HasRows IsClosed RecordsAffected Close Description Přesun na další řádek a návrat hodnoty TRUE/FALSE jestli existuje další řádek. Přesun na další výsledek (pokud Command spustil více SQL dotazů) Indikuje zda pole obsahuje NULL Vrací pořadové číslo sloupce (SELECTu) Vrací hodnotu pole jako System.object, nutné přetypovat na odpovídající typ sloupce Vrací hodnotu pole jako konkrétní datový typ Můžu určit jestli vykonaný dotaz vrací řádky Vrací Boolean Vrací hodnotu určující kolik záznamů bylo provedením query změněno, smazáno Metoda zavírá Reader

Vytvořte aplikaci, která do RichTextBoxu vypíše všechny contactname z tabulky Customers z dané země, název země zadejte prostřednictvím textboxu Úkol 1 SQL dotaz: strsql = "SELECT contactname FROM customers WHERE country = '" + txtcountry.text + "';"; Řešení: FormApp_ExecuteReader_Demo_04

SQL injection Co je může být problémem v předchozí aplikaci? (zaměřte se na zadávání parametru do textboxu) Podívejte se do DB na první záznam tabulky Customers například na hodnotu ContactName (Maria Anders). Spusťte aplikaci, a do txtcountry zadejte následující řetězec (přesně tak jak je napsán): Germany' ; UPDATE customers SET contactname = 'Karel' WHERE CustomerID = 'ALFKI

Proveďte výběr stisknutím tlačítka v aplikaci Zkontrolujte znovu první záznam tabulky Customers

Tomu co jste právě ověřili se říká SQL injection Může způsobit pád DB, získání údajů, které mají být utajeny, smazání cenných dat atd.. (SONY průnik do DB??) Obranou proti SQL injection je použití parametrů Objekt Command obsahuje kolekci parametrů SQL injection není pouze záležitostí SQL serveru a C# ale měli by jste si uvědomit jeho nebezpečí i v jiných aplikacích (PHP, MySQL, atd.)

Command - Parametry Namísto vytvoření dotazu SQL skládáním řetězců (nebezpečí SQL inj.) je možné konkrétní hodnotu do SQL dotazu poslat formou parametru, ten je typově ošetřen a nemůže dojít k tomu, že by uživatel poslal do SQL dotazu ještě nějaký řetězec provádějící jinou činnost Vytvoření nového parametru: New SqlClient.SqlParameter( CategoryId,SqlDbType.Int) Použití ukazuje následující část kódu

Úkol 2 Aplikaci z úkolu jedna upravte tak, aby pracovala s parametrem @Country, ověřte, že původní nedostatek s vložením jiného SQL dotazu do textboxu byl odstraněn. K řešení úkolu můžete použít kód z předchozí strany prezentace.

Executing NonQuery Jde o dotazy jazyka SQL, které nevrací ResultSet: DML (Data manipulation language): INSERT UPDATE DELETE DDL (Data definition language): CREATE TABLE DROP TABLE Příkaz: cmd.executenonquery(); Tento příkaz vrací číslo počet záznamů, jichž se provedení příkazu dotklo, pokud se příkaz nedotkl žádného záznamu DB, pak je návratová hodnota (-1), stejná hodnota je vrácena i při Rollbacku transakce.

Úkol 3 Vytvořte aplikaci podle obrázku, která provede UPDATE záznamů v tabulce v sloupci City, podle vyhledávacího kritéria. V seznamu měst vyberete to, které budete měnit a napíšete jeho nový název. Vypište, kolik záznamů bylo změněno. Použijte parametry pro složení SQL dotazu a volání a návratovou hodnotu metody ExecuteNonQuery. Řešení: Command_NonExecute_Query_Demo_06

Stored procedure Demo

Uložené procedury Bezpečnost Pokud se změní např. způsob třídění dat, nemusím měnit aplikaci, pouze uloženou proceduru Může urychlit běh aplikace

Vytvořte na SQL serveru uloženou proceduru CreateProduct

Vytvořte novou formulářovou aplikaci a nazvěte ji StoredProceduresDemo Na formulář přidejte z ToolBoxu objekt sqlconnection a nazvěte ho cnnnorthwind Data Source=.\SQLEXPRESS;Initial Catalog = Northwind;Integrated Security=True;

Vyberte cnnnorthwind a v properties zobrazte pomocný dialog Application Settings/Property Binding 3 2 1

Přidejte z Toolboxu sqlcommand pokud tam není vyhledejte ho v seznamu přes Choose items a nazvěte ho cmdcreateproduct Nastavte vlastnost Connection string na cnnnorthwind Nastavte vlastnost Type na Stored procedure Nastavte vlastnost CommandText na [dbo].[createproduct] Nechte vytvořit parametry Odstraňte parametr RETURN_VALUE ProductName změňte na nvarchar

Otestujte Command pomocí Preview Data v SQLCommand Tasks funkce na objektu cmdcreateproduct

Na formulář přidejte objekty a pojmenujte je: Textboxy: txtproductname a txtunitprice CheckBox: chkdiscontinued Tlačítka: btnok, btncancel

btncancel pouze zavře aplikaci this.close() btnok zadám objektu Command hodnoty parametrů z GUI a spustím příkaz :

Po spuštění program vyhodí chybu, k jejímu odstranění upravte vlastnost parametru ProductId.Direction na Output

Konec Řešení : Stored_Procedure_Demo_07

Co jsme neprobrali? Batch updates - dávkové zpracování (spuštění více SQL commands najednou) my si ukážeme v následující prezentaci až práci s transakcemi Asynchronní vykonání příkazů, spouštění příkazů v jiném vlákně než je běh hlavní aplikace (nutná znalost delegátů) doporučení nastudovat všem, kteří chtějí seriózně pokračovat ve vývoji aplikací MARS Multiple Active Results Sets nad jedním spojením normálně nemůže být více než jeden aktivní Datareader technologie MARS to umožňuje