Ohjelmointi

Kuinka työskennellä ADO.Netin kanssa irrotetussa tilassa

Microsoftin ADO.Net-tiedonsiirtokehys on ollut käytössä jo yli kahden vuosikymmenen ajan. Voit hyödyntää ADO.Net-verkkoa suorittamaan CRUD-operaatioita monenlaisille tietokannoille .Net CLR: n hallinnoidusta ympäristöstä.

Tietojen tarjoaja on ohjelmistokomponentti, joka kapseloi protokollat, joita käytetään yhteyden muodostamiseen ja vuorovaikutukseen perustietokantaan hallitusta ympäristöstä. Joitakin suosittuja tietojen tarjoajia ovat: SQL Server Data Provider, Oracle Data Provider ja OLEDB Data Provider. ADO.Net voi toimia sekä yhdistetyissä että irrotetuissa tiloissa.

Yhdistetty toimintatila ADO.Netissä on sellainen, jossa yhteys taustalla olevaan tietokantaan on elossa toiminnan koko elinkaaren ajan. Katkaistuna toimintatavana ADO.Net hakee tiedot taustalla olevasta tietokannasta, tallentaa väliaikaisesti haetut tiedot muistiin ja sulkee yhteyden tietokantaan.

Kun työskentelet ADO.Net-verkon kanssa katkaisemattomassa toimintatilassa, hyödynnät yleensä DataAdapteria, DataSetiä, DataTableia ja DataTableReaderia. Vaikka DataAdapter toimii siltana sovelluksen ja tietokannan välillä, DataSet on muistin sisäinen, katkaistu yhteys tietokantaan ja voi sisältää yhden tai useamman DataTable-esiintymän. DataTableReader on samanlainen kuin DataReader, paitsi että se toimii irrotetussa tilassa.

Kaivetaan jotain koodia

Meillä on ollut tarpeeksi käsitteitä - päästään johonkin koodiin. Seuraava koodinpätkä osoittaa, kuinka voit noutaa tietoja tietokannasta, kun yhteys on katkaistu. Huomaa, että tämä esimerkki yhdistetään AdventureWorks-tietokantaan vain havainnollistamistarkoituksessa.

staattinen void Main (merkkijono [] args)

        {

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

yrittää

            {

käyttäen (SqlConnection sqlConnection = uusi SqlConnection (connectionString))

                {

sqlConnection.Open ();

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

DataSet dataSet = uusi DataSet ();

sqlDataAdapter.Fill (dataSet);

                }                

            }

saalis (poikkeus ex)

            {

// Kirjoita koodi tähän käsittelemään poikkeusta

            }

        }

Yllä olevassa koodiluettelossa yhteys tietokantaan muodostetaan käyttämällä SqlConnection-luokan esiintymää. Sitten luodaan DataAdapter-ilmentymä ja sitä käytetään DataSet-esiintymän täyttämiseen DataAdapter-luokan Fill () -menetelmällä. Yhteys tietokantaan sulkeutuu automaattisesti, kun ohjaus tulee ulos "using" -lohkosta, kun Dispose () -menetelmää kutsutaan SqlConnection-ilmentymään automaattisesti. DataSet-ilmentymään tallennetut tiedot sijaitsevat muistissa eivätkä ole riippuvaisia ​​aktiivisesta tietokantayhteydestä, koska DataSet toimii irrotetussa tilassa. Kun tiedot on haettu tietokannasta ja tallennettu muistiin DataSet-ilmentymässä, voit myös muuttaa tietoja, jos haluat, ja säilyttää ne sitten uudelleen tarvittaessa.

DataRow dataRow = dataSet.Tables [0] .NewRow (); // Luo uuden tietorivin

//Nyt voit määritä arvot kullekin tietorivin sarakkeelle

dataSet.Tables [0] .Rows.Add (dataRow); // Lisää tietorivi

sqlDataAdapter.Update (dataSet); // Lisää uuden tietueen

Huomaa, että voit käyttää "using" -lohkoa tyyppeissä, jotka toteuttavat IDisposable-käyttöliittymän. Koko "käyttävä" -lohko on kääritty try-catch-lohkoon käsittelemään poikkeuksia, joita saattaa syntyä ohjelman suorituksen aikana. Huomaa, että tämän esimerkin yhteysmerkkijono haetaan kokoonpanotiedostosta - on hyvä käytäntö eristää yhteysmerkkijono sovelluksen koodista. Voit myös salata yhteysmerkkijonosi tarvittaessa.

Voit myös täyttää DataTable-taulukon samalla tavalla kuin DataSet. Tässä on esimerkki, joka kuvaa tätä.

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

yrittää

            {

käyttäen (SqlConnection sqlConnection = uusi SqlConnection (connectionString))

                {

sqlConnection.Open ();

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

DataTable dataTable = uusi DataTable ();

sqlDataAdapter.Fill (dataTable);

                }                

            }

saalis (poikkeus ex)

            {

// Kirjoita koodi tähän käsittelemään poikkeusta

            }

DataTableReader yhdistää molempien maailmojen parhaat puolet, ts. Se on kuin DataReader, joka toimii irrotetussa tilassa ja se on nopeampi kuin sekä DataTable että DataReader. Jos haluat luoda DataTableReader-sovelluksen, sinun on vain käytettävä CreateDataReader () -menetelmää DataTable-ilmentymässä.

DataTableReader dataTableReader = dataTable.CreateDataReader ();

Seuraava koodiluettelo näyttää, kuinka voit näyttää kaikkien osastojen nimet DataTableReaderin avulla.

staattinen void Main (merkkijono [] args)

        {

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

yrittää

            {

käyttäen (SqlConnection sqlConnection = uusi SqlConnection (connectionString))

                {

sqlConnection.Open ();

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

DataTable dataTable = uusi DataTable ();

sqlDataAdapter.Fill (dataTable);

DataTableReader dataTableReader = dataTable.CreateDataReader ();

while (dataTableReader.Read ())

                    {

Console.WriteLine (dataTableReader ["Nimi"]. ToString ());

                    }      

                }                

            }

saalis (poikkeus ex)

            {

// Kirjoita koodi tähän käsittelemään poikkeusta

            }

Konsoli.Lue ();

        }