2. 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.
3. 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.
4. 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.
5. 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";
6. 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";
7. 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.
8. 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
9. 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()
10. 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>.
11. 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>
12. 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)
13. 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í.
14. 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