[ divac @ 16.02.2012. 12:16 ] @
Pozdrav svima,
Jedan klijent mi je trazio da desktop aplikaciju napisanu u C# uz MySQL bazu stavim na njegov web server koji je na Loopia.rs. Kreirali smo novu bazu, preko MySQL Workbench-a sam uvezao tabele. Sta se desava, odjednom kod za komunikaciju sa MySQL-om koji uspesno radi na lokalnim racunarima i u lokalnoj mrezi prestaje da funkcionise. Uz malo cackanja uspeo sam da nadjem gde su problemi. Ali posle toga sam napravio bazu na sajtu www.FreeMySQL.net, i tu sa vec postojecim kodom radi sve bez ikakvih problema, jedini problem je sto je rad usporen jer je sajt besplatan.

Ukapirao sam da je prvi problem u MySQLCommandBuilder-u, i to ako napisem sledece.

Code:
 
MySqlCommandBuilder cbg = new MySqlCommandBuilder(daContact);
daContact.InsertCommand = cbg.GetInsertCommand(); 


Program nece da prijavi Exception, ali u ovom drugom redu jednostavno se MySQL zaglupi, i prestaje sa radom. Posle toga sta god da pozovem, ne radi. Ako izbrisem drugi red, sve radi.

Drugi problem je prilikom snimanja. Koristio sam standardnu proceduru za snimanje. Evo i koda

Code:

this.BindingContext[dsDogadjaj, "tblDogadjaj"].EndCurrentEdit();

            if (cnCon.State == ConnectionState.Open) cnCon.Close();
            cnCon.Open();

            MySqlTransaction transakcija = cnCon.BeginTransaction();
            MySqlCommand komanda = new MySqlCommand();
            komanda.Transaction = transakcija;

            try
            {
                if (dsDogadjaj.HasChanges())
                {
                    daDogadjaj.Update(dsDogadjaj, "tblDogadjaj");
                }
                transakcija.Commit();
                cnCon.Close();
            }
            catch
            {
                MessageBox.Show("Došlo je do greške. Podaci će biti vraćeni u prvobitno stanje");
                transakcija.Rollback();
                if (cnCon.State.ToString() == "Open") { cnCon.Close(); }
            }
 


Posle ovoga MySQL zaglupi. Sta sam primetio, ako izbrisem ovaj red cnCon.Close(); tj. ako ostavim konekciju aktivnom, sve radi.

Takodje prilikom brisanja podataka iz grida, i aktiviranja save naredbe, sta god da uradim program zaglupi. Posto nisam bas neki strucnjak za podesavanja MySQL-a, sta moze biti problem sa strane Loopie, s'obzirom da na gore pomenutom besplatnom sajtu sve radi ? Ili mozda treba nesto promeniti u kodu prilikom kacenja na bazu na web serveru ? Kontaktiracu Loopi-u u ponedeljak, ali pre toga sam zeleo da cujem neko strucno misljenje
[ sallle @ 21.02.2012. 18:41 ] @
kolko se meni cini, tebi update dataset-a uopste ne ide u okviru transakcije koju si otvorio. za dataset mislim da i ne treba rucno da otvaras/zatvaras konekcije vec da on to sam radi.

obrati paznju i o broju konekcija koje ti dozvoljava loopia, kao i o broju konekcija koje ti otvaras u okviru jedne instance aplikacije.


ja bih batalio oslanjanje na .insert/update/delete operacije dataseta, i rucno pravio sql naredbe i izvrsavao ih.
takodje proveri i sta se desava sa konekcijama, jer ako imas pooling, onda ti ovaj close() bas i ne odradi zatvaranje konekcije...