• 30.03.2017
  • 5 minute de citit
    • m

    • v

    • n

    • m

    • n

In acest articol

Puteti utiliza constrangeri pentru a impune restrictii asupra datelor dintr-un DataTable, pentru a mentine integritatea datelor. O constrangere este o regula automata, aplicata unei coloane sau coloanelor conexe, care determina cursul actiunii atunci cand valoarea unui rand este cumva modificata. Constrangerile sunt aplicate atunci cand proprietatea System.Data.DataSet.EnforceConstraints din DataSet este adevarata . Pentru un exemplu de cod care arata cum sa setati proprietatea EnforceConstraints, consultati subiectul de referinta EnforceConstraints.

Exista doua tipuri de constrangeri in ADO.NET: ForeignKeyConstraint si UniqueConstraint. In mod implicit, ambele constrangeri sunt create automat atunci cand creati o relatie intre doua sau mai multe tabele prin adaugarea unui DataRelation la DataSet . Cu toate acestea, puteti dezactiva acest comportament specificand createConstraints = false atunci cand creati relatia.

ForeignKeyConstraint

Un ForeignKeyConstraint aplica reguli despre modul in care sunt propagate actualizarile si stergerile din tabelele conexe. De exemplu, daca o valoare dintr-un rand dintr-un tabel este actualizata sau stearsa si aceeasi valoare este utilizata si in una sau mai multe tabele corelate, un ForeignKeyConstraint determina ce se intampla in tabelele corelate.

Proprietatile DeleteRule si UpdateRule ale ForeignKeyConstraint definesc actiunea care trebuie intreprinsa atunci cand utilizatorul incearca sa stearga sau sa actualizeze un rand dintr-un tabel asociat. Urmatorul tabel descrie diferitele setari disponibile pentru proprietatile DeleteRule si UpdateRule ale ForeignKeyConstraint .

Setarea regulii Descriere Cascada Stergeti sau actualizati randurile conexe. SetNull Setati valorile din randurile aferente la DBNull . SetDefault Setati valorile din randurile corelate la valoarea implicita. Niciuna Nu luati nicio masura pe randurile corelate. Aceasta este valoarea implicita.

Un ForeignKeyConstraint poate restrictiona, precum si propaga, modificarile la coloanele conexe. In functie de proprietatile setate pentru ForeignKeyConstraint a unei coloane, daca proprietatea EnforceConstraints din DataSet este adevarata , efectuarea anumitor operatiuni pe randul parinte va duce la o exceptie. De exemplu, daca proprietatea DeleteRule a ForeignKeyConstraint este None , un rand parinte nu poate fi sters daca are randuri copil.

Puteti crea o constrangere de cheie straina intre coloane simple sau intre o matrice de coloane utilizand constructorul ForeignKeyConstraint . Treceti obiectul ForeignKeyConstraint rezultat la metoda Add a proprietatii Constraints a tabelului , care este o ConstraintCollection . De asemenea, puteti transmite argumente constructor la mai multe suprasolicitari ale metodei Add a unei ConstraintCollection pentru a crea un ForeignKeyConstraint .

Cand creati un ForeignKeyConstraint , puteti transmite valorile DeleteRule si UpdateRule la constructor ca argumente sau le puteti seta ca proprietati ca in exemplul urmator (unde valoarea DeleteRule este setata la None ).

Dim custOrderFK As ForeignKeyConstraint = New ForeignKeyConstraint (“CustOrderFK”, _ custDS.Tables (“CustTable”). Coloane (“CustomerID”), _ custDS.Tables (“OrdersTable”). Coloane (“CustomerID”)) custOrderFK.DeleteRule Rule.None ‘Nu se poate sterge o valoare de client care are asociate comenzile existente. custDS.Tables (“OrdersTable”). Constraints.Add (custOrderFK) ForeignKeyConstraint custOrderFK = new ForeignKeyConstraint (“CustOrderFK”, custDS.Tables [“CustTable”]. Coloane [“CustomerID”], custDS.Tables [“OrdersTable Coloane [“CustomerID”]); custOrderFK.DeleteRule = Rule.None; // Nu se poate sterge o valoare de client care are asociate comenzile existente.

videos porno casero españa fiestas porno
peliculas eroticas alemanas porno tv
miakalifa porni
maturehd amas de casa follando
se corre en el coño de su hija pornox
me gusta follar española follando
video sexo porno fiestas
amas de casa infieles incesto x
maduras masturbandose largeporntube
incesto subtitulado español tias corriendose
abuelas tragando leche todoporno
comic maduras pilladas desnudas
videos porno corridas internas madresxxx
fiestas porno maduras folladoras
mature.com maduras en la playa
porno gratis viejas mujer masturbandose
vecina mirona masturbaciones
videos actrices españolas desnudas p0rno
pajas caseras michelle jenner desnuda
se folla a su cuñada maduras sex

custDS.Tables [“OrdersTable”]. Constraints.Add (custOrderFK);

AcceptRejectRule

Modificarile la randuri pot fi acceptate folosind metoda AcceptChanges sau anulate folosind metoda RejectChanges din DataSet , DataTable sau DataRow . Atunci cand un set de date contine ForeignKeyConstraints , invocind AcceptChanges sau RejectChanges metode impune AcceptRejectRule . Proprietatea AcceptRejectRule a ForeignKeyConstraint determina ce actiune va fi intreprinsa pe randurile copil atunci cand AcceptChanges sau RejectChanges este apelat pe randul parinte.

Urmatorul tabel listeaza setarile disponibile pentru AcceptRejectRule .

Setare regula Descriere Cascada Acceptati sau respingeti modificarile la randurile copil. Niciuna Nu luati nicio masura pe randurile copil. Aceasta este valoarea implicita.

Exemplu

Urmatorul exemplu creeaza un ForeignKeyConstraint, seteaza mai multe dintre proprietatile sale, inclusiv AcceptRejectRule si il adauga la ConstraintCollection a unui obiect DataTable.

private void CreateConstraint (DataSet dataSet, string table1, string table2, string column1, string column2) {// Declarati variabile de coloana parinte si de coloana copil. DataColumn parentColumn; DataColumn childColumn; ForeignKeyConstraint foreignKeyConstraint; // Setati variabilele de coloana parinte si copil. parentColumn = dataSet.Tables [table1] .Columns [column1]; childColumn = dataSet.Tables [table2] .Columns [column2]; foreignKeyConstraint = new ForeignKeyConstraint (“SupplierForeignKeyConstraint”, parentColumn, childColumn); // Setati valori nule atunci cand o valoare este stearsa. foreignKeyConstraint.DeleteRule = Rule.SetNull; foreignKeyConstraint.UpdateRule = Rule.Cascade; foreignKeyConstraint.AcceptRejectRule = AcceptRejectRule.None; // Adaugati constrangerea si setati EnforceConstraints la adevarat. dataSet.Tables [table1] .Constraints.Add (foreignKeyConstraint); set de date. EnforceConstraints = adevarat; } Private Sub CreateConstraint (dataSet As DataSet, _ table1 As String, table2 As String, _ column1 As String, column2 As String) ‘Declarati variabilele de coloana parinte si de coloana copil. Dim parentColumn As DataColumn Dim childColumn As DataColumn Dim foreignKeyConstraint As ForeignKeyConstraint ‘Setati variabilele coloanei parinte si copil. parentColumn = dataSet.Tables (table1) .Columns (column1) childColumn = dataSet.Tables (table2) .Columns (column2) foreignKeyConstraint = New ForeignKeyConstraint _ (“SupplierForeignKeyConstraint”, parentColumn, childColumn) ‘Seteaza valori nule atunci cand o valoare este sters foreignKeyConstraint.DeleteRule = Rule.SetNull foreignKeyConstraint.UpdateRule = Rule.Cascade foreignKeyConstraint.AcceptRejectRule = AcceptRejectRule.None ‘Adaugati constrangerea si setati EnforceConstraints la adevarat.

Constrangere unica

Obiectul UniqueConstraint , care poate fi atribuit fie unei singure coloane, fie unei matrice de coloane dintr-un DataTable , asigura faptul ca toate datele din coloana sau coloanele specificate sunt unice pe fiecare rand. Puteti crea o constrangere unica pentru o coloana sau o matrice de coloane utilizand constructorul UniqueConstraint . Treceti obiectul UniqueConstraint rezultat la metoda Add a proprietatii Constraints a tabelului , care este o ConstraintCollection . De asemenea, puteti transmite argumente constructor la mai multe suprasolicitari ale metodei Add a unei ConstraintCollection pentru a crea un UniqueConstraint. Cand creati un UniqueConstraint pentru o coloana sau coloane, puteti specifica optional daca coloana sau coloanele sunt o cheie principala.

De asemenea, puteti crea o constrangere unica pentru o coloana setand proprietatea unica a coloanei la adevarat . Alternativ, setarea proprietatii Unique a unei singure coloane la fals elimina orice constrangere unica care ar putea exista. Definirea unei coloane sau coloane ca cheie primara pentru un tabel va crea automat o constrangere unica pentru coloana sau coloanele specificate. Daca eliminati o coloana din proprietatea PrimaryKey a unui DataTable , UniqueConstraint este eliminat.

Urmatorul exemplu creeaza un UniqueConstraint pentru doua coloane ale unui DataTable .

Dim custTable As DataTable = custDS.Tables (“Clienti”) Dim custUnique As UniqueConstraint = _ New UniqueConstraint (New DataColumn () {custTable.Columns (“CustomerID”), _ custTable.Columns (“CompanyName”)}) custDS.Tables (“Clienti”). Constraints.Add (custUnique) DataTable custTable = custDS.Tables [“Clienti”]; UniqueConstraint custUnique = new UniqueConstraint (new DataColumn [] {custTable.Columns [“CustomerID”], custTable.Columns [“CompanyName”]}); custDS.Tables [“Clienti”]. Constraints.Add (custUnique);

Vezi si

  • DataRelation
  • Tabel de date
  • ForeignKeyConstraint
  • Constrangere unica
  • Definitia schemei DataTable
  • DataSets, DataTables si DataViews
  • Prezentare generala ADO.NET