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

UpdateCommand affected 0 of the expected 1 ???

[es] :: .NET :: UpdateCommand affected 0 of the expected 1 ???

[ Pregleda: 1453 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

manix
IDD Lab
Arilje

Član broj: 9936
Poruke: 482
85.222.179.*

Sajt: www.lendovisanje.com


Profil

icon UpdateCommand affected 0 of the expected 1 ???02.05.2009. u 15:19 - pre 182 meseci
Imam 3 polja za unos podataka, svakom je uradjen binding za odgovarajuce polje u bazi...
Nakon odredjivanja ID radnika u poljima se ocitaju podaci, ako postoje a ako ne ona su prazna (logicno :) )
Imam dugmic i na klik vrsim proveru da li zapis postoji, ako postoji radim ispravku a u suprotnom novi zapis

Medjutim, prva ispravka prodje ali druga mi javlja gresku Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.

evo koda za dugmic click
Code:
            If DnevnaListaUcinkaBindingSource.Count < 1 Then 
                Try
                    'upis u bazu
                    Dim dodajOperaciju As DataTable = bazaDataSet.DnevnaListaUcinka

                    Dim unos As DataRow = dodajOperaciju.NewRow

                    unos.Item("SifraRad") = SifraRadnika.Text

                    unos.Item("Datum") = kalendar.DateTime.Year & "." & Format(kalendar.DateTime.Month, "00") & "." & Format(kalendar.DateTime.Day, "00")

                    unos.Item("CenaRad") = CDec(rezijaSat.Text)

                    unos.Item("SatiRezije") = CInt(rezijaVreme.Text)

                    unos.Item("trecaS") = trecaS.CheckState

                    unos.Item("dnevnaEfikasnost") = 0
                    unos.Item("brigada") = CInt(txt_brigada.Text)
                    unos.Item("satiBrigade") = CInt(normaVreme.Text
)
                    dodajOperaciju.Rows.Add(unos)

                    DnevnaListaUcinkaTableAdapter.Update(dodajOperaciju)

                    bazaDataSet.AcceptChanges()

                Catch ex As Exception
                    'poruka da upis nije uspeo
                End Try

            Else
                DnevnaListaUcinkaBindingSource.EndEdit()
                DnevnaListaUcinkaTableAdapter.Update(bazaDataSet.DnevnaListaUcinka)
                DnevnaListaUcinkaTableAdapter.Fill(bazaDataSet.DnevnaListaUcinka)
            End If


Sta je sada ovde problem?
ako treba jes neko objasnjenje ili deo koda, recite

 
Odgovor na temu

Mikelly

Član broj: 16730
Poruke: 389
85.94.114.*



Profil

icon Re: UpdateCommand affected 0 of the expected 1 ???02.05.2009. u 19:05 - pre 182 meseci
Greska koju dobijas znaci ili da se neki od zapisa u bazi promijenio od kada si ti pozvao fill metod tableadapter-a ili je nesto do samog tableadapter-a.

table adapter ima 4 command objekta, i update i delete koriste stara stanja zapisa (mozes ih dobiti kroz original verziju reda). Imas jos i current verzija reda (te podatke koriste update i insert) a imas jos i proposed verziju ali ona postoji samo izmedju beginedit i endedit metoda reda.

Najslozenija je naravno update i upravo sa njom ti odje imas problem. Evo recimo kako ona ide:

UPDATE Neka_Tabela SET Neko_Polje = @novavrijednost WHERE Neko_polje = @stara_vrijednost

gdje su @novavrijednost i @staravrijednost parametri koji sadrze current i original vrijednosti polja Neko_Polje, respektivno.

Tebi je problem u vrijednosti parametra @staravrijednost jer se vrijednost koju taj parametar sadrzi ne poklapa sa vrijednoscu koja je trenutno u bazi.

Moguc je problem da imas konflikt u polju koje ti je primarni kljuc. Jer, baza sama generise vrijednosti primarnog kljuca, a i ADO.NET radi to isto, potpuno nezavisno, tako da se lako mogu desiti (ne)poklapanja medju to dvoje. Rjesenje za to je da u dataset designeru podesis seed svojstvo kolone koja ti je primarni kljuc na -1, i inkrement svojstvo podesis takodje na -1, tako da baza generise unaprijed, ado.net unazad i nemas poklapanja. To ti mozda rijesi problem.

I jos jedna stvar, ti u jednom momentu pises:

Code:

Dim dodajOperaciju as DataTable = bazaDataSet.DnevnaListaUcinka


ja nisam VB vec C# ali mi se cini da ti je konacan rezultat ovoga to da ti i dodajOperaciju i DnevnaListaUcinka pokazuju na istu DataTable, a ti ih poslije tretiras kao da su razlicite.

Ako si htio da napravis novi DataTable trebao si nesto kao:

Code:

Dim dodajOperaciju as DataTable = new(? valjda treba u VB) BazaDataSet.DnevnaListaUcinka


Primijeti veliko B kod BazaDataSet, jer ti je BazaDataSet klasa, a bazaDataSet instanca te klase.

Ne znam oce li ti ovo sto pomoc', ali nece valjda ni odmoc'

Pozdrav.
 
Odgovor na temu

[es] :: .NET :: UpdateCommand affected 0 of the expected 1 ???

[ Pregleda: 1453 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

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