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

MSDTC problem, i jos po nesto

[es] :: .NET :: MSDTC problem, i jos po nesto

[ Pregleda: 1333 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mikelly

Član broj: 16730
Poruke: 389
212.200.246.*



Profil

icon MSDTC problem, i jos po nesto06.06.2009. u 09:53 - pre 181 meseci
Baza ima tri tabele, i evo f-je koja radi update iz aplikacije u bazu:

Code:

public void Save()
        {
            using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
            {
                TaxDataSet.ObvezniciDataTable odt;
                TaxDataSet.KontaDataTable kdt;
                TaxDataSet.DataDataTable ddt;
                try
                {
                    /*odt = (TaxDataSet.ObvezniciDataTable)this.taxDataSet.Obveznici.GetChanges(DataRowState.Deleted);
                    ddt = (TaxDataSet.DataDataTable)this.taxDataSet.Data.GetChanges(DataRowState.Deleted);
                    kdt = (TaxDataSet.KontaDataTable)this.taxDataSet.Konta.GetChanges(DataRowState.Deleted);
                    
                    if (ddt != null) this.dataTableAdapter.Update(ddt);
                    if (kdt != null) this.kontaTableAdapter.Update(kdt);
                    if (odt != null) this.obvezniciTableAdapter.Update(odt);

                    ddt = (TaxDataSet.DataDataTable)this.taxDataSet.Data.GetChanges(DataRowState.Added);
                    kdt = (TaxDataSet.KontaDataTable)this.taxDataSet.Konta.GetChanges(DataRowState.Added);
                    odt = (TaxDataSet.ObvezniciDataTable)this.taxDataSet.Obveznici.GetChanges(DataRowState.Added);

                    if (odt != null) this.obvezniciTableAdapter.Update(odt);
                    if (kdt != null) this.kontaTableAdapter.Update(kdt);
                    if (ddt != null) this.dataTableAdapter.Update(ddt);

                    ddt = (TaxDataSet.DataDataTable)this.taxDataSet.Data.GetChanges(DataRowState.Modified);
                    kdt = (TaxDataSet.KontaDataTable)this.taxDataSet.Konta.GetChanges(DataRowState.Modified);
                    odt = (TaxDataSet.ObvezniciDataTable)this.taxDataSet.Obveznici.GetChanges(DataRowState.Modified);

                    if (odt != null) this.obvezniciTableAdapter.Update(odt);
                    if (kdt != null) this.kontaTableAdapter.Update(kdt);
                    if (ddt != null) this.dataTableAdapter.Update(ddt);*/                  
                    
                    this.obvezniciTableAdapter.Update(this.taxDataSet.Obveznici);
                    this.kontaTableAdapter.Update(this.taxDataSet.Konta);
                    this.dataTableAdapter.Update(this.taxDataSet.Data);

                    this.taxDataSet.AcceptChanges();
                    ts.Complete();
                }
                catch (DBConcurrencyException e)
                {
                    //MessageBox.Show("Greska prilikom upisa u bazu!", "Greska", MessageBoxButtons.OK);
                    MessageBox.Show(e.Message);
                    this.taxDataSet.RejectChanges();
                }
                finally
                { 
                    
                }
            }
        }


Po prvi put koristim TransactionScope za transakcije, ali sam "stuck with it" jer table adapteri ne podrzavaju klasicne transakcije.

Evo problema: Prvi poziv funkcije save() u kodu, proci ce bez problema, ali ce prva sledeca komunikacija sa bazom, recimo poziv fill metode nekog od tableadaptera, izazvati sledecu gresku: "MSDTC on Server VILLAIN\SQLEXPRESS is unavailable".

Da li nekako ta transakcija ostaje otvorena (i pored ts.Complete() u kodu i zatvaranja u using blok) pa fill pokusava preko nje da komunicira sa bazom, ili je nesto sasvim drugo, pojma nemam.

Ako neko ima iskustva sa TransactionScope i MSDTC molio bih pomoc.

I jos jedna stvar, nevezana za MSDTC, tice se update metoda table adaptera.

U prvom dijelu gornje funkcije vrsim update fine rezolucije (prvo deleted, pa added, pa modified redove, sve skolski), ali poslije poziva update metoda za added redove ne dobijem nazad u aplikaciju novi kljuc (ostaje mi -1), iako sve prodje do baze, i tamo, naravno, dobijem ispravan kljuc.

Nasuprot tome, ako pozovem prosti update nad citavom tabelom, bez razdvajanja na razlicite vrste redova, DOBICU taj kljuc nazad u aplikaciju. Ne moram ni da pominjem da mi taj kljuc jako treba. Naravno, ako ga ne dobijem automatski, svakako ima nacina da ga nadjem, ali mi to bas ne izgleda elegantno, radije bih bez dodatnog rada. Mozda samo propustam neku sitnicu, ne znam...

Pozdrav i hvala.
 
Odgovor na temu

[es] :: .NET :: MSDTC problem, i jos po nesto

[ Pregleda: 1333 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

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