[C#] INSERT do viac tabuliek

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod spajdo 29. 4. 2008 20:46

Ahojte!

Este nikdy som nerobil nejaku vacsiu aplikaciu a tak tento problem riesim prvy krat.
Mam formular kde uzivatel vypise rozne data a ja ich potrebujem ulozit do databazy.
Lenze jednotlive data z formulara idu do roznych tabuliek. Asi viete co myslim. Proste ze "meno a priezvisko" idu do inej tabulky ako "mesto a psc" a tak dalej...

Viem ze tam musim dodrziavat referencnu integritu ale nevime sa cely den pohnut?

Nevie mi niekto poradit ako na to? Nejaky navod, priklad alebo tutorial? prosiiiim
"I cesta dlhá tisíc kilometrov sa začína prvým krokom."
spajdo
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 29. 4. 2008 21:37

A v cem mas problem? Proste pouzijes vic insertu. Samozrejme bys to mel provest v ramci jedne transakce.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod spajdo 29. 4. 2008 21:51

no ja som to spravil do viacerych metod!
V jednej metode insertujem len do tych tabuliek v ktorych nie su ziadne FK cize do nich nejde ziaden vztah. V druhej metode insertujem do tabulky do ktorej mi idu vztahy z tych predchadzajucich tabuliek a v tretej metode volam prve dve metody a potom ukladam do poslednej talbulky.

Neviem... to si mam zakazdym zistit selectom ze kam mi to ulozilo do tych tabuliek (zistit si to ID) a potom to insertnem ako FK do tej poslednej tabulky? ja uz neviem... :'(
"I cesta dlhá tisíc kilometrov sa začína prvým krokom."
spajdo
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 29. 4. 2008 22:21

Zalezi jakou databazi pouzivas, nektere umi vratit hodnotu noveho ID po INSERTu.
Pokud to tvoje databaze nepodporuje, je lepsi si vzdycky nechat ID vygenerovat pred INSERTem a pak ho pouzivat dal.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod piErcE 29. 4. 2008 22:50

tak vratit toto ID umi prakticky kazda "normalni" databaze...

bohuzel tazatel nam neuvedl zadnou informaci, ktere bychom se mohli chytit...
... jakou pouziva databazi
... jakym zpusobem s ni komunikuje (pres datasety apod., nebo vola natvrdo sql prikazu pres sql command, nebo pouziva nejaky O/R mapper (nhibernate, linqtosql)....

to se spatne odpovida....
Garmin DriveLuxe 50 - iPhone SE - Octavia III 1.4 110 kW DSG
piErcE
Junior

Odeslat příspěvekod spajdo 29. 4. 2008 22:52

no ja praveze pouzivam Access (z donutenia) a tam mam nastavene ID ako Automaticke cislo.
Najskor si nacitavam pomocou selectu do premennych ID_banka, ID_mesta... z tabuliek tie id-cka podla dat zadanych vo formulari. Cize ak je vo formulari zadane mesto a PSC tak sa urobi select:

"SELECT ID_mesta FROM mesto where nazov_mesta = ' "+ textbox_nazov_mesta.Text.ToString()+" ' OR psc = ' "+textbox_psc.Text.ToString()+" ' ";

Potom to takto (zevraj nevhodne) testujem ci sa podarilo daco nacitat...
Kód: Vybrat vše
                    try { ID_banka = r_banka["ID_banka"].ToString(); }
                    catch { ID_banka = ""; }
                    try { ID_mesta = Convert.ToInt32(r_mesto["ID_mesta"]); }
                    catch { ID_mesta = 0; }
                    try { ID_statu = Convert.ToInt32(r_stat["ID_statu"]); }
                    catch { ID_statu = 0; }


no a potom urobim takto ten insert
Kód: Vybrat vše
                if (ID_mesta == 0)
                {
                    OleDbCommand ins_mesto = new OleDbCommand(cmd_mesto, conn);
                    ins_mesto.ExecuteNonQuery();
                }


Do tabuliek kde nemam ziadne FK mi to vklada normalne, ale do tych kde uz ukladam aj FK cize ID-cka z ostatnych tabuliek to nechce vkladat.... respektive mi tam uklada cislo 0 a ja nemozem prist na to kde je problem... :(
"I cesta dlhá tisíc kilometrov sa začína prvým krokom."
spajdo
Junior
Uživatelský avatar

Odeslat příspěvekod piErcE 29. 4. 2008 23:05

priznam se ze ten posledni prispevek jsem vubec nepochopil ...

ale .. pokud neco vkladas do tabulky, kde je sloupecek typu "autonumber" (typicky primarni klic nad tabulkou) tak po jeho vlozeni muzes zavolat select @@identity .. a to ti vrati to ID , ktere dostala ta radka, kteruo jsi vlozil ..

a tu pak pouzijes pro vkladani do tech cizich klicu
Garmin DriveLuxe 50 - iPhone SE - Octavia III 1.4 110 kW DSG
piErcE
Junior

Odeslat příspěvekod spajdo 29. 4. 2008 23:11

hmm nemas nejaky konkretny kus kodu ktory by si mi mohol ukazat? Ja som v zivote s databazou nerobil a najlepsie sa mi chape z prikladu.... :oops:
"I cesta dlhá tisíc kilometrov sa začína prvým krokom."
spajdo
Junior
Uživatelský avatar

Odeslat příspěvekod p_Sipi 30. 4. 2008 13:14

Tak ti neviem ci Access podporuje @@identity. Mylim ze skorej nie.
Ak to ma byt single user (pri accesse hadam ano) tak si proste vytiahni najvacsie ID z tabulky a to je to posledne pridane.
p_Sipi
Junior

Odeslat příspěvekod spajdo 30. 4. 2008 13:26

hmm to ma veru nenapadlo... to znie ako dobry napad :)
mozno ho otestujem v reali :)
"I cesta dlhá tisíc kilometrov sa začína prvým krokom."
spajdo
Junior
Uživatelský avatar

Odeslat příspěvekod spajdo 30. 4. 2008 14:33

ludkovia moji... nie som si isty a tak sa radsej spytam... moze byt takyto select?


select * from tabulka where ((a='ahoj' AND b='cau' AND c='bye') OR (a='ahoj' AND c='cau'))

bude to fungovat? Viete, to keby uzivatel nevyplnil vsetky policka v textboxoch tak to takto osetrit... hmm?
"I cesta dlhá tisíc kilometrov sa začína prvým krokom."
spajdo
Junior
Uživatelský avatar

Odeslat příspěvekod piErcE 30. 4. 2008 23:46

p_Sipi píše:Tak ti neviem ci Access podporuje @@identity. Mylim ze skorej nie.
Ak to ma byt single user (pri accesse hadam ano) tak si proste vytiahni najvacsie ID z tabulky a to je to posledne pridane.


ach jo .. tak radeji nemysli a zkus si o tom neco najit.. nebo myslis ze bych sem o @@identity v souvislosti s accessem psal jen tak pro zabavu?

ono to samozrejme access opravdu neumi .. ale ... umi to jet provider, takze pres ruzny oledbconnection jde select @videntity pouzit a provider zajisti premapovani na posledni hodnotu autonumberu ...
Garmin DriveLuxe 50 - iPhone SE - Octavia III 1.4 110 kW DSG
piErcE
Junior

Odeslat příspěvekod spajdo 1. 5. 2008 01:28

hmm som si vsimol taku zaujimavu vec....
subor ktory pouzivam ako databazu (DATA.mdb) ma skoro vsetky tabulky prazdne, ale cely subor ma 21 MB. Ked ho zkomprimujem do suboru *.rar alebo *.zip tak velkost tohto suboru je 445 kB
Nevie niekto v com je problem? Skusal som vymazat zo suboru DATA.mdb vsetky data, tabulky, relacie, dotazy... proste vsetko a aj tak ostala velkost 21 MB.... co sa deje? :grr:
"I cesta dlhá tisíc kilometrov sa začína prvým krokom."
spajdo
Junior
Uživatelský avatar

Odeslat příspěvekod piErcE 1. 5. 2008 01:59

spajdo píše:hmm som si vsimol taku zaujimavu vec....
subor ktory pouzivam ako databazu (DATA.mdb) ma skoro vsetky tabulky prazdne, ale cely subor ma 21 MB. Ked ho zkomprimujem do suboru *.rar alebo *.zip tak velkost tohto suboru je 445 kB
Nevie niekto v com je problem? Skusal som vymazat zo suboru DATA.mdb vsetky data, tabulky, relacie, dotazy... proste vsetko a aj tak ostala velkost 21 MB.... co sa deje? :grr:


nic.. je to klasicka databaze, pri vymazu dat tam ta data zustavaji ..nad databazi je potreba zavolat Shrink (ci jak se to v accesu jmenuje, je na to primo funkce), ktery ji "setrese" a vymazana data skutecne vyprazdni...
Garmin DriveLuxe 50 - iPhone SE - Octavia III 1.4 110 kW DSG
piErcE
Junior

Odeslat příspěvekod spajdo 1. 5. 2008 08:22

hmm to je celkom fajn... ale som si vsimol jednu taku dost zapekliutu vec.... Po dlhom dlhom zapaseni som spravil pridavanie zamestnancov ktore sa robi do 5-tich tabulik.... Myslel som si ze vsetko frci v pohode, ale teraz pozeram ze ked pridam do tej databazy tych 5 riadkov udajov (textu) tak mi zakazdym stupne velkost databazy o 100kB. Nevie niekto preco???
Ja som uz zufaly...! :-S :-S
"I cesta dlhá tisíc kilometrov sa začína prvým krokom."
spajdo
Junior
Uživatelský avatar

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků