14
Pokročilé techniky programování ADO.NET

ADO.NET

Embed Size (px)

Citation preview

Pokročilé techniky programováníADO.NET

ADO.NET Technologie ADO.NET (ActiveX Data Objects) nahrazuje technologii ADO určenou pro programování v nativním kódu pomocí komponent COM.

Microsoft dodává ADO.NET s nativní podporou pro servery SQL a Oracle, dále potom pro databáze, které implementují rozhraní OLE DB nebo ODBC. Existují však nativní podpory i pro další databázové servery od jiných poskytovatelů, jako např. MySQL, Oracle aj.

Součástí ADO.NET je mnoho sdílených tříd, které se používají všemi druhy databází. V prostoru jmen System.Data jsou deklarovány např. třídy DataSet, DataTable, DataRelation. Další sdílené třídy jsou deklarovány v prostoru jmen System.Data.Common, jako např. DataColumnMapping, DataTableMapping.

Třídy specifické pro různé DB Kromě sdílených tříd obsahuje ADO.NET třídy specifické pro různé databáze. Např. pro připojení k databázi obsahuje třídy:

- SqlConnection – pro SQL server v prostoru jmen System.Data.SqlClient,

- SqlCeConnection – pro server SQL Compact Edition (dále jen SQL CE) v prostoru jmen System.Data.SqlServerCe,

- OracleConnection – pro server Oracle v prostoru jmen System.Data.OracleClient,

- OleDbConnection – pro servery implementující rozhraní OLE DB v prostoru jmen System.Data.OleDb

- OdbcConnection – pro servery implementující rozhraní ODBC v prostoru jmen System.Data.Odbc.

Třídy specifické pro různé DB Uvedené třídy mají od verze ADO.NET 2.0 společného předka abstraktní třídu DbConnection, která implementuje rozhraní IDbConnection. V nižších verzích .NET uvedené třídy neměly společného předka, ale jen společné rozhraní.

Tento princip je použit i pro další specifické třídy. Specifické třídy mají předponu odpovídající druhu databáze. Mají společného předka abstraktní třídu, která má předponu Db a ta implementuje rozhraní, které má předponu IDb.

Databázové připojení Pro přístup k databázi se musí poskytnout parametry připojení, jako např. název počítače, na kterém je databázový server spuštěn, přihlašovací údaje apod. Při připojení k databázi se používají třídy typu DbConnection, které pracují s připojovacím řetězcem, jenž se zpravidla inicializuje konstruktorem.

Připojovací řetězec obsahuje vlastnosti a jejich hodnoty oddělené středníkem.

Např. pro databázi Oracle na počítači s adresou IP 10.65.24.2:

string connectionString = "Data source = 10.65.24.2/orcl.65.24.2; User ID = system; Password = heslo";

Databázové připojení Pro SQL Server na stejném počítači, na kterém je spuštěn klient s integrovaným ověřováním totožnosti uživatele pomocí uživatelských účtů systému Windows:

string connectionString = "server = (local); integrated security=SSPI;database=Northwind";

Pro databázi SQL Express s připojením k databázovému souboru (s příponou .mdf) s integrovaným ověřováním totožnosti uživatele pomocí uživatelských účtů systému Windows:

string connectionString = @"Data Source=.\SQLEXPRESS; AttachDbFilename=d:\AdventureWorksLT_Data.mdf; Integrated Security=True;Connect Timeout=30;User Instance=True";

Databázové připojení Konstruktor třídy typu DbConnection neotevře spojení. K tomu se používá metoda Open:

void Open() Zavření spojení provede metoda Close:

void Close() Spojení je možné otevírat a zavírat několikrát.

Třída implementuje rozhraní IDisposable. Pokud se spojení nezavře metodou Close, zavře jej metoda Dispose.

Databázové připojení – příklad Příklad demonstruje otevření připojení na vzorovou databázi SQL CE.

Pro vytvoření připojovacího řetězce lze též použít třídy typu DbConnectionStringBuilder, např. SqlConnectionStringBuilder:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = "(local)"; builder.IntegratedSecurity = true; builder.InitialCatalog = "d:\\Northwind"; SqlConnection con = new SqlConnection(builder.ConnectionString);

https://goo.gl/WeY3cQ

Továrna poskytovatele dat Od .NET 2.0 je k dispozici třída továrny poskytovatele dat DbProviderFactory, která obsahuje metody pro vytvoření tříd pro práci s daty na abstraktní úrovni bez znalosti konkrétního typu databáze. Jedná se například o následující virtuální metody:

DbCommand CreateCommand() DbConnection CreateConnection() DbDataAdapter CreateDataAdapter() DbParameter CreateParameter()

Továrna poskytovatele dat Vytvoření této třídy zajišťuje třída DbProviderFactories a její statická metoda GetFactory:

DbProviderFactory GetFactory(string providerInvariantName)

Pro vytvoření továrny poskytovatele dat je potřebné jméno poskytovatele. K tomu lze využít definici připojovacího řetězce v konfiguračním souboru aplikačního nastavení, a to sekci <connectionStrings>.

Továrna poskytovatele dat V prostředí Visual Studio 2010 lze vytvořit připojovací řetězec pomocí menu Project | Properties | Settings – výběr typu (Connection string) a buď přímo zapsat řetězec, nebo zvolit tlačítko s třemi tečkami a zadat připojení k databázi pomocí dialogového okna.

Konfigurační soubor app.exe.config pro databázi SQL CE může mít např. následující obsah:

<?xml version="1.0" encoding="utf-8" ?> <configuration>

<configSections></configSections> <connectionStrings>

<add name="Connection02.Properties.Settings.Northwind" connectionString="Data Source=D:\Northwind.sdf" providerName="Microsoft.SqlServerCe.Client.3.5" />

</connectionStrings> </configuration>

Příkazy Pro vykonání příkazů jazyka SQL slouží třída typu DbCommand. Třída SqlCeCommand obsahuje 4 konstruktory umožňující nastavit text SQL příkazu, databázové připojení a případně i transakci.

SqlCeCommand() SqlCeCommand(string commandText) SqlCeCommand(string commandText, SqlCeConnection connection) SqlCeCommand(string commandText, SqlCeConnection connection, SqlCeTransaction transaction)

Příkazy Třída typu DbCommand dále obsahuje vlastnost CommandType, která poskytuje nebo nastavuje typ příkazu výčtového typu obsahujícího následující výčtové konstanty:

- Text – text SQL příkazu – implicitní hodnota,

- StoredProcedure – jméno uložené procedury,

- TableDirect – jméno tabulky. Lze použít jen pro rozhraní OLE DB.

Třída typu DbCommand implementuje rozhraní IDisposable. Při volání metody Dispose dojde pouze k likvidaci instance třídy DbCommand nikoliv také k zavření databázového připojení.

Příkaz pro modifikaci databáze Příkaz, kterým se modifikuje databáze, lze spustit voláním následující metody třídy typu DbCommand:

int ExecuteNonQuery() Používá se pro SQL příkazy UPDATE, INSERT a DELETE nebo tvorbu databáze. Pro příkazy UPDATE, INSERT a DELETE vrací počet ovlivněných řádků. Pro ostatní příkazy vrací -1.

https://goo.gl/D9PAOq