praegune kellaaeg 20.06.2025 17:25:44
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
mauro
Kreisi kasutaja

liitunud: 24.04.2006
|
13.04.2009 02:26:37
C# MSSQL andmete kustutamise probleem |
|
|
Probleem siis selline, et saanud veel hakkama sellise situatsiooniga:
Kui esimeses tabelis kustutada ära üks rida. Siis teises tabelis kustutab ära ka kõik read mis onlid esimese tabeli reaga seotud(tabelid on omavahel seotud).
NT kui esimeses tabelis on väljad grupid ja Grupp ning kustutan ära rea mille ID on 2. siis teises tabelis kustutab ära ka väljad mille grupid ( ei ole primary, lihtsalt int. tüüpi väli esimese tabeliga sidumiseks) on võrdne esimese tabeli omaga.
Kood:
int del2 = int.Parse(GroupComboBox.SelectedValue.ToString());
KontaktDataSet.GruppRow Rowdel2 = kontaktDataSet.Grupp.FindByGruppID(del2);
Rowdel2.Delete();
Sellise koodiga hetkel toimub Grupi kustutamine, aga vaja sisi ka teises tabelis ridu kustutada samal ajal.
Ehk on C#-s võimalus otsida (nagu FindByGroupID) ka neid mis ei ole primaryKey?
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
wiinanina
HV kasutaja
liitunud: 27.02.2003
|
13.04.2009 12:42:02
|
|
|
Andmebaasist kustutamine pole tavaliselt hea mõte. Märgi parem andmed mittekasutatavaks.
Kui oled siiski otsustanud, et sul on vaja andmebaasist midagi kustutada, ning veel korraga mitmest tabelist, siis kasuta andmebaasi vahendeid.
Trigerid ja protseduurid on MSSQL-s täiesti olemas.
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
ref
Kreisi kasutaja
liitunud: 10.08.2003
|
13.04.2009 17:25:04
|
|
|
paar soovitust: int.Parse asemel kasuta int.TryParse(String, out int), sellisel juhul on pisuke veakontroll ka ja ei pea ise sellega mässama
samuti nagu ma aru saan on sul mingine väli mis seob teise tabeliga, ehk siis välisvõti (foregin key), sellisel juhul saad kenasti öelda sellele võtmele, et ON DELETE CASCADE, umbes midagi stiilis:
ALTER TABLE [dbo].[tabelinimi}
ADD CONSTRAINT FK_mingi_kena_nimi FOREIGN KEY (v2litabelis)
REFERENCES Tabelinimi (tabeliid ) ON DELETE CASCADE
|
aga jah, läbi baasiprotseduuride/triggerite oleks see operatsioon veel mõistlikum (vajadusel saad siis ka kustutamisele mingi logimise külge toppida - juhuks kui kiirelt vaja andmeid taastada.... st. backupist taastamine ei ole alati kõige mõistlikum)
Antud juhul püüad andmeloogikat äriloogika osas kirjeldada, ei ole seegi teps mitte hea disainimuster...
|
|
Kommentaarid: 17 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
15 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|