Populația setului de date din baza de date ()

Setul de date ADO.NET DataSet este o vizualizare de date în memorie care oferă un model software relațional consecvent independent de sursa de date. Setul de date DataSet este un set complet de date care include tabele, constrângeri și relații între tabele. Setul de date DataSet este independent de sursa de date, astfel încât DataSet poate include date care sunt locale pentru aplicație, precum și date din mai multe surse de date. Gestionarea interacțiunii cu sursele de date existente se face folosind Adaptorul de date.







Metoda de umplere a DataAdapter servește pentru a popula setul de date DataSet cu rezultatele metodei SelectCommand a obiectului DataAdapter. Metoda de completare are ca argument argumentul setului de date DataSet care trebuie completat. și un tabel de date sau numele unui tabel de date. care trebuie să fie umplută cu rândurile returnate de metoda SelectCommand.

Folosirea DataAdapter-ului pentru a obține întreaga tabelă necesită timp, mai ales dacă are un număr mare de rânduri. Acest lucru se datorează faptului că accesul la baza de date, detectarea și procesarea datelor, precum și transferul de date către client durează mult timp. Trecerea întregii mese pe client duce la blocarea tuturor rândurilor de pe server. Puteți utiliza clauza WHERE pentru a îmbunătăți performanța. care poate reduce semnificativ numărul de rânduri returnate clientului. De asemenea, puteți reduce cantitatea de date returnate clientului utilizând lista explicită specificată a coloanelor necesare în instrucțiunea SELECT. O altă soluție bună pentru această problemă este de a obține rânduri în pachete (de exemplu, conținând câteva sute de linii în același timp) și, de asemenea, să primească următorul pachet numai după finalizarea procesării curente.

Metoda de umplere utilizează implicit obiectul DataReader pentru a returna numele și tipurile de coloane folosite pentru a crea tabelele din DataSet. și date pentru a popula rândurile de tabele din setul de date. Tabelele și coloanele sunt create numai dacă acestea nu există deja. În caz contrar, metoda Fill utilizează schema DataSet existentă. Tipurile de coloane sunt create ca tipuri de .NET Framework în conformitate cu tabelele din Mapări de date ADO.NET. Cheile primare sunt create numai dacă există în sursa de date și proprietatea DataAdapter. MissingSchemaAction are valoarea MissingSchemaAction. AddWithKey. În cazul în care Fill detectează că tabela are o cheie primară, atunci datele din setul de date pentru rânduri, în care valorile coloanelor cheie primare coincid cu valorile din rândurile care sunt returnate de la sursa de date, vor fi înlocuite cu datele din sursa de date. Dacă cheia primară nu este găsită, datele sunt adăugate la tabelele DataSet. În metoda Fill, atunci când populați DataSet, se utilizează toate mapările existente (a se vedea mapările DataAdapter, DataTable și DataColumn (ADO.NET).)

Dacă SelectCommand returnează rezultatele OUTER JOIN, atunci DataAdapter nu stabilește valoarea PrimaryKey pentru tabela de date rezultată. Pentru a vă asigura că rândurile duplicate sunt detectate corect, utilizatorul trebuie să determine cheia primară, PrimaryKey. Pentru mai multe informații, consultați Definirea cheilor primare (ADO.NET).

Următorul exemplu de cod creează o instanță a SqlDataAdapter. care utilizează conexiunea SqlConnection pentru baza de date Northwind Microsoft SQL Server și stochează DataTable în setul de date DataSet cu o listă de clienți. Instrucțiunile SQL și argumentele SqlConnection. trecut la constructorul SqlDataAdapter. sunt utilizate pentru a crea proprietatea SelectCommand a obiectului SqlDataAdapter.







Codul afișat în acest exemplu nu deschide sau închide conexiunea în mod explicit. Dacă conexiunea nu este încă deschisă, metoda Fill deschide implicit conexiunea. care este utilizat de DataAdapter. Dacă operația de umplere a deschis o conexiune, ea o închide, de asemenea, când este completă umplerea. Acest lucru vă permite să simplificați codul atunci când utilizați o operație separată, cum ar fi Fill sau Update. Cu toate acestea, atunci când efectuați mai multe operații care necesită o conexiune deschisă, puteți îmbunătăți performanța aplicațiilor apelând în mod explicit metoda Open a obiectului Connection. efectuați operațiuni cu sursa de date și apoi apelați metoda de închidere a obiectului Conectare. Este necesar să salvați conexiunile la sursa de date numai pentru o perioadă cât mai scurtă posibil, eliberând resursele pentru a fi utilizate de alte aplicații client.

Dacă DataAdapter găsește mai multe seturi de rezultate, creează mai multe tabele în Setul de date. Tabelele primesc un nume implicit suplimentar pentru TableN. pentru Tabelul0 începând cu "Tabel". Dacă numele tabelului este trecut ca argument în metoda de completare. tabelele primesc numele implicit TableNameN cu un sufix care crește succesiv, dar începând cu "TableName", nu cu TableName0.

Puteți utiliza orice număr de seturi de date DataSet cu DataAdapter. Fiecare DataAdapter poate fi utilizat pentru a popula unul sau mai multe obiecte DataTable și pentru a permite actualizări în sursa de date corespunzătoare. Elementele DataRelation și Constraint pot fi adăugate la DataSet local, ceea ce vă permite să legați date din surse de date eterogene. De exemplu, un DataSet poate conține date dintr-o bază de date Microsoft SQL Server, dintr-o bază de date IBM DB2 accesată prin OLE DB și o sursă de date pentru preluarea datelor XML ca flux. Unul sau mai multe obiecte DataAdapter pot gestiona conexiunea la fiecare sursă de date.

În mod implicit, DataSet salvează date utilizând tipurile de date .NET Framework. Pentru majoritatea aplicațiilor, aceasta oferă o modalitate convenabilă de a prezenta informații despre sursa de date. Cu toate acestea, această vizualizare poate cauza o problemă dacă tipul de date din sursa de date este tipul zecimal sau numeric utilizat în SQL Server. Tipul de date zecimal .NET Framework permite utilizarea a maximum 28 de cifre semnificative, în timp ce tipul de date zecimal SQL Server permite utilizarea a 38 de cifre semnificative. Dacă în timpul operației Fill SqlDataAdapter se stabilește că precizia câmpului SQL Server zecimal este mai mare de 28 de caractere, linia curentă nu este adăugată la DataTable. În schimb, evenimentul FillError are loc. care vă permite să stabiliți dacă va exista o pierdere de precizie și să luați măsurile corespunzătoare. Pentru mai multe informații despre evenimentul FillError, consultați Gestionarea evenimentelor DataAdapter (ADO.NET). Pentru a obține o valoare a tipului zecimal SQL Server, puteți utiliza și obiectul SqlDataReader și apelați metoda GetSqlDecimal.

În ADO.NET 2.0, există un suport extins pentru System.Data.SqlTypes în DataSet. Pentru mai multe informații, consultați SqlTypes și DataSet (ADO.NET).

seturi de ierarhici rânduri sau secțiuni (tip DBTYPE_HCHAPTER în OLE DB, tip adChapter în ADO), poate fi utilizat pentru umplerea conținutului DataSet. Când OleDbDataAdapter în timpul operației Fill detectează o coloană care este partiționată, este creat un tabel DataTable pentru această coloană. Acest tabel este completat cu coloane și linii din secțiune. Tabelul creat într-o coloană de divizare este atribuit un nume format din numele numele tabelei părinte și coloana nepartiționat, sub formă de «ParentTableNameChapteredColumnName». Dacă setul de date DataSet conține deja o tabelă a cărei denumire este în concordanță cu numele coloanei partiționate, tabela curentă este populate cu datele din secțiune. Dacă în tabelul existent nu există o coloană care să corespundă coloanei din secțiune, se adaugă o nouă coloană.

Înainte de a completa tabelele din datele DataSet conținute în coloanele partiționate, între părinte și copil tabele ale setului ierarhic de rânduri creează o legătură prin adăugarea unei coloane întreg de la mamă și tabelele copilului stabilirea coloana parentale pentru autoincrement și crearea de DataRelation prin adăugarea celor două coloane de tabele. Conectarea adăugată este atribuită unui nume folosind numele tabelului părinte și o coloană partiționată în formularul "ParentTableNameChapterColumnName".

Rețineți că coloana asociată există numai în setul de date. O populație suplimentară din sursa de date poate determina adăugarea de noi rânduri în tabele, în loc de a face modificări la rândurile existente.

Rețineți că atunci când utilizați metoda DataAdapter.Fill supraîncărcată. care ia un argument de tip DataTable, numai acest tabel este populat. Coloana intregă cu increment automat poate fi adăugată în continuare în tabel, dar nu puteți crea sau completa un tabel copil și nici nu puteți crea un link.

Următorul exemplu utilizează furnizorul MSDataShape pentru a crea o coloană partiționată pentru fiecare client din lista de clienți. După aceasta, setul de date este umplut cu date.







Trimiteți-le prietenilor: