Programování

Jak pracovat s ADO.Net v odpojeném režimu

Rámec přístupu k datům Microsoft ADO.Net se používá již více než dvě desetiletí. Můžete využít ADO.Net k provádění operací CRUD na široké škále databází ze spravovaného prostředí .Net CLR.

Poskytovatel dat je softwarová součást, která zapouzdřuje protokoly používané k připojení a interakci s podkladovou databází ze spravovaného prostředí. Mezi oblíbené poskytovatele dat patří: SQL Server Data Provider, Oracle Data Provider a OLEDB Data Provider. ADO.Net může pracovat v připojeném i odpojeném režimu.

Připojený režim provozu v ADO.Net je takový, ve kterém je připojení k podkladové databázi živé po celou dobu životnosti operace. Mezitím je odpojený provozní režim, ve kterém ADO.Net načte data z podkladové databáze, dočasně uloží data načtená do paměti a poté zavře připojení k databázi.

Při práci s ADO.Net v odpojeném provozním režimu byste obvykle využívali DataAdapter, DataSet, DataTable a DataTableReader. Zatímco DataAdapter funguje jako most mezi aplikací a databází, DataSet je odpojená reprezentace databáze v paměti a může obsahovat jednu nebo více instancí DataTable. DataTableReader je podobný DataReaderu kromě toho, že funguje v odpojeném režimu.

Pojďme se ponořit do nějakého kódu

Pojmů už máme dost - pojďme do nějakého kódu. Následující fragment kódu ukazuje, jak můžete načíst data z databáze v odpojeném režimu. Tento příklad se připojuje k databázi AdventureWorks pouze pro ilustraci.

static void Main (řetězec [] args)

        {

string connectionString = ConfigurationManager.ConnectionStrings ["AdventureWorksDB"]. ConnectionString;

Snaž se

            {

pomocí (SqlConnection sqlConnection = nový SqlConnection (connectionString))

                {

sqlConnection.Open ();

SqlDataAdapter sqlDataAdapter = nový SqlDataAdapter ("SELECT * FROM [AdventureWorks2014]. [HumanResources]. [Department]", sqlConnection);

DataSet dataSet = nový DataSet ();

sqlDataAdapter.Fill (dataSet);

                }                

            }

úlovek (výjimka mimo)

            {

// Sem napište kód pro zpracování výjimky

            }

        }

Ve výše uvedeném výpisu kódu je navázáno připojení k databázi pomocí instance třídy SqlConnection. Potom se vytvoří instance DataAdapter a použije se k naplnění instance DataSet pomocí metody Fill () třídy DataAdapter. Připojení k databázi se automaticky uzavře, když ovládací prvek vyjde z bloku „using“, protože metoda Dispose () je vyvolána v instanci SqlConnection automaticky. Data uložená v instanci DataSet jsou umístěna v paměti a nejsou závislá na aktivním připojení k databázi, protože DataSet pracuje v odpojeném režimu. Jakmile se data načtou z databáze a uloží se do paměti v instanci DataSet, můžete data také změnit, pokud chcete, a poté podle potřeby data znovu uchovat.

DataRow dataRow = dataSet.Tables [0] .NewRow (); // Vytvoří nový datový řádek

//Teď můžeš specifikovat hodnoty pro každý ze sloupců datového řádku

dataSet.Tables [0] .Rows.Add (dataRow); // Přidejte datový řádek

sqlDataAdapter.Update (dataSet); // Vloží nový záznam

Všimněte si, že blok "using" můžete použít na typech, které implementují rozhraní IDisposable. Celý blok „using“ je zabalen do bloku try - catch, aby byly zpracovány výjimky, které mohou nastat při provádění programu. Všimněte si, že připojovací řetězec v tomto příkladu je načten z konfiguračního souboru - je dobrým zvykem izolovat připojovací řetězec z kódu vaší aplikace. V případě potřeby můžete také zašifrovat připojovací řetězec.

DataTable můžete také naplnit stejným způsobem, jakým naplníte DataSet. Zde je příklad, který to ilustruje.

string connectionString = ConfigurationManager.ConnectionStrings ["AdventureWorksDB"]. ConnectionString;

Snaž se

            {

pomocí (SqlConnection sqlConnection = nový SqlConnection (connectionString))

                {

sqlConnection.Open ();

SqlDataAdapter sqlDataAdapter = nový SqlDataAdapter ("SELECT * FROM [AdventureWorks2014]. [HumanResources]. [Department]", sqlConnection);

DataTable dataTable = nový DataTable ();

sqlDataAdapter.Fill (dataTable);

                }                

            }

úlovek (výjimka mimo)

            {

// Sem napište kód pro zpracování výjimky

            }

DataTableReader kombinuje to nejlepší z obou světů, tj. Je jako DataReader, který pracuje v odpojeném režimu a je rychlejší než DataTable i DataReader. Chcete-li vytvořit DataTableReader, vše, co musíte udělat, je vyvolat metodu CreateDataReader () na instanci DataTable.

DataTableReader dataTableReader = dataTable.CreateDataReader ();

Následující výpis kódu ukazuje, jak můžete zobrazit názvy všech oddělení pomocí DataTableReader.

static void Main (řetězec [] args)

        {

string connectionString = ConfigurationManager.ConnectionStrings ["AdventureWorksDB"]. ConnectionString;

Snaž se

            {

pomocí (SqlConnection sqlConnection = nový SqlConnection (connectionString))

                {

sqlConnection.Open ();

SqlDataAdapter sqlDataAdapter = nový SqlDataAdapter ("SELECT * FROM [AdventureWorks2014]. [HumanResources]. [Department]", sqlConnection);

DataTable dataTable = nový DataTable ();

sqlDataAdapter.Fill (dataTable);

DataTableReader dataTableReader = dataTable.CreateDataReader ();

while (dataTableReader.Read ())

                    {

Console.WriteLine (dataTableReader ["Název"]. ToString ());

                    }      

                }                

            }

úlovek (výjimka mimo)

            {

// Sem napište kód pro zpracování výjimky

            }

Console.Read ();

        }