Přidání záznamu do více tabulek MS SQL   zodpovězená otázka

ASP.NET WebForms, Databáze

Ahoj,

mám asi začátečnícký dotaz ohledně vložení záznamu do více MSSQL tabulek. Nejlepší asi bude když uvedu příklad:

Mám dvě tabulky v databázi a to KlientObecne a KlientKontakty. A já potřebuju, když budu vytvářet nějaký formulář pro přidávání nového klienta tak aby se mi tam najednou oběvily k vložení kolonky obou těhto tabulek.

Momentálně to řeším tak že mím pod sebou dva FormView. Jeden má nastavena ty data z KlienObecne a ten druhy data z KlientKontakty. To je ovšem neefektivní ptž. člověk musí nejprve kliknout na tlačítko vložení u prvního a pak ještě u druhého FormView ale já bych potřeboval aby se přidaly jedním klikem obě tyto FormView do příslušných tabulek.

Díky za všechny reakce.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Viděl bych to šna patně navrženou databázi (proč duplicitní data?) i program(proč dva formy?) Každopádně je podle mě jedno co do té události nacpete, to samé co pro uložení do jedné napíšete pro uložení do dvou, ve stejné události....

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No ono jde o to, že pokud bych to udělal cele v jedne tabulce tak by ta tabulka byla hrozně široká třeba 20 sloupců což se mi moc nelíbí a proto to mám ve dvou tabulkách.

A přes jakou událost to mám udělat? Já používám ten designer a SQLDataSource.

Jsem začátečník takže je to pro mě ještě dost nesrozumitelné. Přešel jsem z PHP a ASP.NET se teprve učím chápat.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Napadají mne dvě varianty:

1)V případě,že ovládáte SQL jazyk,napište si procedury,které budou dělat select,insert,update z/do obou tabulek

2)LINQ nebo EF(EntityFramework) - lepší varianta,pokud půjde o rozsáhlejší systém.Horší a složitější pro začátečníka.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Asi jsem ten svůj problém špatně popsal. Zkusím to trochu názorněji:

Mám dvě tabulky v databázi KlientObecne a KlientKontakty. Ty tabulky vypadaji třeba takto:

KlientObecneId | Jmeno | Ulice | Mesto | Stat

KlientKontaktyId | Telefon | Fax | Email

Moje ASP.NET aplikace vypada takto. Mám dva FormView a pro každý jeden SqlDataSource (takže dva SqlDataSource):

První FormView

Zadejte jméno: [_]

Zadejte ulici: [_]

Zadejte město: [_]

Zadejte stát: [_]

[ODESLAT]

Druhý FormView

Zadejte telefon: [_]

Zadejte fax: [_]

Zadejte email: [_]

[ODESLAT]

Já, ale potřebuju aby tlačítko odeslat bylo jenom jedno a po kliknutí by se odeslaly oba FormView a to každý do své tabulky v databázi.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak a kvôli 8 stĺpcom to rozdeľujete?

Rozdeľovať môžete vtedy, ak s jedným pracujete len tam a s druhým len inde.Alebo ak potrebujete napríklad 50 stĺpcov.

Nezaoberám sa databázami podrobne, ale toto by som nerozdeľoval.Len to spôsobuje ťažkosti pri návrhu web aplikácie, ako sami vidíte.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

KlientObecne

Id | Jmeno | Ulice | Mesto | Stat

KlientKontakty

Id | Telefon | Fax | Email

To je ako 20 stĺpcov?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ne, tohle je jenom ukázka ve skutečnosti je tam těch sloupců celkem v obou tabulkách 24.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak si vše ošetřete v události button_click,nasbírané hodnoty uložte do DB a je to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Do FormView nedávejte tlačítko pro insert a dejte jej mimo. V události click pak na oba formview zavolejte InsertItem, což se bude chovat stejně, jako kdybyste v obou formech dal insert.

Možná bych ale doporučil vysbírat hodnoty z formview ručně a v databázi udělat uloženou proceduru, která to celé uloží v jedné transakci, tzn. buď se data uloží najednou, anebo nastane chyba a v databázi se nezmění nic. Nestane se vám tak, že by se jeden formview uložil a druhý ne, bude to bezpečnější.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky, tento postup bez problémů funguje.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback