Programmering

Hvordan jobbe med ADO.Net i frakoblet modus

Microsofts ADO.Net data access framework har vært i bruk i over to tiår nå. Du kan utnytte ADO.Net til å utføre CRUD-operasjoner på et bredt utvalg av databaser fra det administrerte miljøet til .Net CLR.

En dataleverandør er en programvarekomponent som innkapsler protokollene som brukes til å koble til og samhandle med den underliggende databasen fra det administrerte miljøet. Noen av de populære dataleverandørene inkluderer: SQL Server Data Provider, Oracle Data Provider og OLEDB Data Provider. ADO.Net kan fungere i både tilkoblede og frakoblede modus.

En tilkoblet driftsmåte i ADO.Net er en der forbindelsen til den underliggende databasen er i live hele operasjonens levetid. I mellomtiden er en frakoblet driftsmodus en der ADO.Net henter data fra den underliggende databasen, lagrer dataene som er hentet midlertidig i minnet, og deretter lukker forbindelsen til databasen.

Når du arbeider med ADO.Net i frakoblet modus, vil du vanligvis utnytte DataAdapter, DataSet, DataTable og DataTableReader. Mens DataAdapter fungerer som en bro mellom applikasjonen og databasen, er en DataSet en in-memory, frakoblet representasjon av databasen og kan inneholde en eller flere DataTable-forekomster. En DataTableReader ligner på en DataReader bortsett fra at den fungerer i frakoblet modus.

La oss grave i litt kode

Vi har fått nok av konseptene - la oss komme inn på noen kode. Følgende kodebit viser hvordan du kan hente data fra en database i frakoblet modus. Merk at dette eksemplet bare kobles til AdventureWorks-databasen for illustrasjonsformål.

statisk tomrom Main (streng [] args)

        {

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

prøve

            {

bruker (SqlConnection sqlConnection = new SqlConnection (connectionString))

                {

sqlConnection.Open ();

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

DataSet dataSet = nytt datasett ();

sqlDataAdapter.Fill (datasett);

                }                

            }

fangst (Unntak eks)

            {

// Skriv kode her for å håndtere unntak

            }

        }

I kodelisten ovenfor opprettes en forbindelse til databasen ved hjelp av en forekomst av SqlConnection-klassen. Deretter opprettes en DataAdapter-forekomst, og den brukes til å fylle ut en DataSet-forekomst ved hjelp av Fill () -metoden i DataAdapter-klassen. Forbindelsen til databasen lukkes automatisk når kontrollen kommer ut av "bruk" -blokken når Dispose () -metoden påberopes på SqlConnection-forekomsten automatisk. Dataene som er lagret i DataSet-forekomsten, ligger i minnet og er ikke avhengige av en aktiv databaseforbindelse, da DataSet fungerer i frakoblet modus. Når dataene er hentet fra databasen og lagret i minnet i en DataSet-forekomst, kan du også endre dataene hvis du vil, og deretter vedvare dataene igjen når det er nødvendig.

DataRow dataRow = dataSet.Tables [0] .NewRow (); // Oppretter en ny datarad

//Du kan nå spesifiser verdier for hver av kolonnene i dataraden

dataSet.Tables [0] .Rows.Add (dataRow); // Legg til dataraden

sqlDataAdapter.Update (datasett); // Setter inn en ny plate

Merk at du kan bruke "bruk" -blokken på typer som implementerer IDisposable-grensesnittet. Hele "bruk" -blokken er pakket inn i en prøvefangst-blokk for å håndtere unntak som kan oppstå når programmet kjøres. Merk at tilkoblingsstrengen i dette eksemplet hentes fra en konfigurasjonsfil - det er god praksis å isolere tilkoblingsstrengen fra programmets kode. Du kan også kryptere tilkoblingsstrengen om nødvendig.

Du kan også fylle ut en datatabell på samme måte som du fyller ut et datasett. Her er et eksempel som illustrerer dette.

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

prøve

            {

bruker (SqlConnection sqlConnection = new SqlConnection (connectionString))

                {

sqlConnection.Open ();

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

Datatabell datatabell = ny datatabell ();

sqlDataAdapter.Fill (dataTable);

                }                

            }

fangst (Unntak eks)

            {

// Skriv kode her for å håndtere unntak

            }

En DataTableReader kombinerer det beste fra begge verdener, dvs. det er som en DataReader som fungerer i frakoblet modus, og det er raskere enn både DataTable og DataReader. For å opprette en DataTableReader er alt du trenger å gjøre å påkalle CreateDataReader () -metoden i DataTable-forekomsten.

DataTableReader dataTableReader = dataTable.CreateDataReader ();

Følgende kodeliste viser hvordan du kan vise navnene på alle avdelingene ved hjelp av DataTableReader.

statisk tomrom Main (streng [] args)

        {

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

prøve

            {

bruker (SqlConnection sqlConnection = new SqlConnection (connectionString))

                {

sqlConnection.Open ();

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

Datatabell datatabell = ny datatabell ();

sqlDataAdapter.Fill (dataTable);

DataTableReader dataTableReader = dataTable.CreateDataReader ();

while (dataTableReader.Read ())

                    {

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

                    }      

                }                

            }

fangst (Unntak eks)

            {

// Skriv kode her for å håndtere unntak

            }

Console.Read ();

        }

$config[zx-auto] not found$config[zx-overlay] not found