Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C# i upis ključeva u bazu

[es] :: .NET :: C# i upis ključeva u bazu

[ Pregleda: 2055 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

barisha1

Član broj: 284740
Poruke: 8
178.239.16.*



+1 Profil

icon C# i upis ključeva u bazu22.11.2011. u 10:41 - pre 151 meseci
pozdrav
Napravio sam u bazi tabele RadniNalog i KonfiguracijaArtikli kojima sam definirao da se primarni ključ sam upisuje(Autonumber).Napravio sam u infopathu obrazac na kojemu su dvije tabele,podaci o radnom nalogu(broj konfiguracije,napomena,gotovo,datum....) i podaci o artiklima(ser. broj,naziv,opis.....).Imam Submit dugme koje sam povezao sa web servisom.U tabeli Artikli imam strani ključ RadniNalog.Problem je što ne znam na koji način da pokažem artiklima da se vežu na radni nalog,tj da se u strani ključ upiše primarni koji pravim istovremeno.Može li se ovo napravit ili ima neki drugi način da se ovo napravi??Ako treba još nekih informacija ili kod samo recite.
 
Odgovor na temu

nikitaGradov
Beograd

Član broj: 223576
Poruke: 206
92.244.132.*



+3 Profil

icon Re: C# i upis ključeva u bazu24.11.2011. u 15:53 - pre 151 meseci
Citat:
barisha1: pozdrav
Napravio sam u bazi tabele RadniNalog i KonfiguracijaArtikli kojima sam definirao da se primarni ključ sam upisuje(Autonumber).Napravio sam u infopathu obrazac na kojemu su dvije tabele,podaci o radnom nalogu(broj konfiguracije,napomena,gotovo,datum....) i podaci o artiklima(ser. broj,naziv,opis.....).Imam Submit dugme koje sam povezao sa web servisom.U tabeli Artikli imam strani ključ RadniNalog.Problem je što ne znam na koji način da pokažem artiklima da se vežu na radni nalog,tj da se u strani ključ upiše primarni koji pravim istovremeno.Može li se ovo napravit ili ima neki drugi način da se ovo napravi??Ako treba još nekih informacija ili kod samo recite.


>da pokažem artiklima da se vežu na radni nalog,tj da se u strani ključ upiše primarni koji pravim istovremeno

Ne znam sta podrazumijevas pod 'istovremeno' - scenario bi izgledao ovako:

- otvaras (prethodno kreiranu) transakciju (u transakciji su INSERT komande i za parent i za child tabelu)
- izvrsis INSERT u parent tabelu (u tvom slucaju radni nalog)
- ovaj INSERT napises tako da ti vrati ID poslednjeg upisanog reda (a to je ono sto tebi treba):
Code:

SET NOCOUNT ON
INSERT INTO parent (data1, data2,data3) VALUES (‘test’,’test’,123) SELECT @@Identity AS parent_id
SET NOCOUNT OFF


- napomena: @@Identity vraca ID poslednjeg INSERT-ovanog reda
- kreiraj INSERT komandu za child tabelu, koristeci vrijednost 'parent_id' za strani kljuc u child tabeli (kod tebe je to: Artikli)
- izvrsi INSERT u child tabelu
- komituj (Commit()) transakciju, ako je upis uspio, odnosno, ponisti (RollBack()), ako nije ...

Evo i u C#-u:
Code:

          //konkcija
          SqlTransaction SqlTrans = conn.BeginTransaction(IsolationLevel.RepeatableRead, "INSERT");
          //kreiramo query
          StringBuilder sbInsert = new StringBuilder();
                sbInsert.Append("SET NOCOUNT ON ");
                sbInsert.Append("INSERT INTO parent ");
                sbInsert.Append("(data1, data2,data3)");
                sbInsert.Append("VALUES (‘test’,’test’,123)");
                sbInsert.Append("SELECT @@Identity AS parent_id ");
                sbInsert.Append("SET NOCOUNT OFF ");
           //izvrsi komandu
                DataSet dataSet = new DataSet();
                SqlCommand cmd = new SqlCommand(sbInsert.ToString(), conn, SqlTrans);
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);
                sqlDataAdapter.Fill(dataSet, "Parent");
                DataTable table = dataSet.Tables["Parent "];
              //ukoliko vrati ID 0 ili manje onda nije uspeo upis
                int transID = UInt32.Parse(table.Rows[0]["parent_id"].ToString());
                if (transID <= 0)
                {
                  MessageBox.Show(“Nije uspeo upis”);
                  SqlTrans.Rollback("INSERT");
                }
                else
                {
                  //ovde ide upis svih child redova
                  SqlTrans.Commit();
                }     


Ovaj kod je samo skica - tvoje je da ga prilagodis tvom zahtjevu ...


Programming is fun, but writing good software is hard ...
 
Odgovor na temu

barisha1

Član broj: 284740
Poruke: 8
*.dynamic.telemach.ba.



+1 Profil

icon Re: C# i upis ključeva u bazu24.11.2011. u 19:18 - pre 151 meseci
hvala na odgovoru.malo ću istražiti ovo i probat napravit pa javim kako ide
 
Odgovor na temu

[es] :: .NET :: C# i upis ključeva u bazu

[ Pregleda: 2055 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.