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

Live update sa MySQL podacima?

[es] :: .NET :: WPF Programiranje :: Live update sa MySQL podacima?

[ Pregleda: 3948 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vortex77

Član broj: 91694
Poruke: 124
*.static.sbb.rs.



+1 Profil

icon Live update sa MySQL podacima?23.05.2012. u 09:36 - pre 144 meseci

Sta je potrebno uraditi da bi se promenjeni podaci "refreshovali" kod svih korisnika u visekorisnickoj aplikaciji?

Naime, za pristup MySQL bazi koristim MySQLConnector .NET i radim sa TableAdapter-ima (koristeci Fill za inicijalno popunjavanje). Pristup podacima i njihovo azuriranje radi korektno, ali problem je u visekorisnickom radu. Svi podaci koji se preuzmu "stoje" u lokalu i korisnici ne mogu videti promene u bazi u "real time-u", tako da je potrebno odraditi sinhronizaciju lokalnih podataka sa bazom.
Najociglednije resenje bi bilo ponovno pozivanje Fill-a, ali to je upravo ono sto zelim da izbegnem jer neke tabele imaju i preko 20k redova.

Da pojasnim, navescu jedan primer :

Aplikacija ima jedan dataGrid koji je popunjava na Window_Loaded i dugme za snimanje promena u bazu. Recimo da 2 korisnika (A i B) pokrenu aplikaciju u isto vreme, korisnik A odradi promene i snimi ih u bazu.
Sta je potrebno odraditi da bi korisnik B mogao da vidi novo nastale promene bez ponovnog pozivanja Fill-a?


Hvala
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Live update sa MySQL podacima?24.05.2012. u 06:58 - pre 144 meseci
Bilo je vec slicnih pitanja, probaj da prelistas malo forume.

Uglavnom, jedna ideja je da imas kolonu sa verzijom recorda i onda dovlacis samo promenjene recorde, a to je jeftino.
 
Odgovor na temu

vortex77

Član broj: 91694
Poruke: 124
*.static.sbb.rs.



+1 Profil

icon Re: Live update sa MySQL podacima?24.05.2012. u 07:53 - pre 144 meseci
S'obzirom da sam clan poodavno vec mi je navika da postujem samo ako ne nadjem odgovor medju postojecim temama, ali hvala za predlog.

Sto se tice menjanja strukture baze, to bih naravno gledao da izbegnem ako je moguce
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Live update sa MySQL podacima?24.05.2012. u 16:54 - pre 144 meseci
Drugi problem ti je kada ces prozvati Fill.
Znaci kako jedna radna stanica da sazna da na serveru ima novih podataka. Ako to budes resio na neki nacin, mozda ce ti se i prvi deo problema resiti bez novih kolona.
 
Odgovor na temu

vortex77

Član broj: 91694
Poruke: 124
*.static.sbb.rs.



+1 Profil

icon Re: Live update sa MySQL podacima?25.05.2012. u 08:22 - pre 144 meseci
Ok... nakon nekoliko sati trazenja po msdn-u uspeo sam da dobijem ono sto sam trazio

Ako jos neko bude imao slicnih problema, ovde moze naci resenje (delimicno).

Ideja je da se svaka tabela alteruje dodavanjem timestamp kolone radi pracenja poslednje promene u tabeli.
Kod u c# koji hendla refresh bazira se na kreiranju run-time TableAdapter-a i DataTable-a koji se popunjavaju samo slogovima koji su promenjeni od poslednjeg ucitavanja podataka sa komandom Fill.

Code:

 private void RefreshData()
        {
            dynamic row = ((DataRowView)(this.cvsMaster.View.CurrentItem)).Row;

            string MyConString = "SERVER=server_ip;" +
                                         "DATABASE=database_name;" +
                                         "UID=user;" +
                                         "PASSWORD=password;";

           
            string sql = "SELECT ID, NAZIV, TIME FROM MASTER WHERE TIME > '" + vreme + "'";
        
            using (MySqlConnection connection = new MySqlConnection(MyConString))
            {
                connection.Open();
                using (MySqlCommand cmdSel = new MySqlCommand(sql, connection))
                {
                    DataTable dt = new DataTable();
                    MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
                    da.Fill(dt);

                    ds.MASTER.Merge(dt, false);
                    cvsMaster.View.Refresh();
                    
                    vreme = now_TA.GetNow();
                }
                connection.Close();
            }
        }


Konkretna promena vrednosti se radi pozivom komande Merge

Napomena - promenjiva vreme "cuva" vreme servera u momentu poziva Fill-a, a puni se preko :
Code:

SELECT CAST( now() as CHAR) as NOW;   //zbog konvertovanja datuma u VS izgledalo je jednostavnije 
                                          // da se vreme vrati kao string



Ovo resenje radi za sve INSERT, UPDATE akcije na tabeli, ali problem ostaje za DELETE. Ako neko ima ideju kako ovaj primer moze da se modifikuje da bi obuhvatio i DELETE, molim vas da postujete.


 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Live update sa MySQL podacima?25.05.2012. u 12:33 - pre 144 meseci
Imas dve mogucnosti:
- da uvedes kolonu DELETED tipa bool pa da brises redove tako sto ces u nju upisati true i voditi racuna o tome pri kasnijim SELECTima
- da uvedes tabelu DELETED_ROWS koja ce imati kolone TABLE_NAME, ID, DELETED_AT u koju upisujes id rekorda koji obrises i vreme kada se to desilo pa je posle propitujes slicno kao sto si pitao za izmenjene redove
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: Live update sa MySQL podacima?

[ Pregleda: 3948 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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