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();
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(); }
}
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

Ivan Urosevic