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

Ucitavanje xml datoteke u MySQL tabele, C#

[es] :: .NET :: Ucitavanje xml datoteke u MySQL tabele, C#

[ Pregleda: 2024 | Odgovora: 3 ] > 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 Ucitavanje xml datoteke u MySQL tabele, C#04.10.2012. u 11:37 - pre 140 meseci
Pozdrav,

Potrebno mi je resenje za prebacivanje podataka iz XML fajla u tabele MySQL.

Problem je u tome sto XML fajl u sebi sadrzi podatke nekoliko tabela:

XML:
Code:

<?xml version="1.0" standalone="yes"?>
<Sifarnici xmlns="">
  <Tabela1>
    <ID_Tabela1>1</ID>
    <Naziv>NN</Naziv>
  </Tabela1>
  <Tabela2>
    <ID_Tabela2>1</ID>
    <Kolicina>NN</Kolicina>
  </Tabela2>
</Sifarnici>

Naravno ovo je samo skracena verzija. Prava datoteka sadrzi i po 100k unosa sa po 3 i vise tabela.
Za sada sam uspeo da pronadjem nacin da ucitam ceo XML i prebacim u bazu po sistemu "1 na 1" ali ovo resenje radi samo za XML sa jednom tabelom:
Code:

            mojDSDataSet eDS = (mojDSDataSet)this.FindResource("mojDS");

            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "XML Files|*.xml";
            dlg.Title = "Select a XML File";
           
            Nullable<bool> result = dlg.ShowDialog();

            if (result == true)
            {               
                    mojaTabelaTableAdapter TA = new mojaTabelaTableAdapter();
                    TableAdapterManager manager;
                    manager = new TableAdapterManager();
                    manager.mojaTabelaTableAdapter = TA;

                    DataSet fakeDS = new DataSet();
                    DataTable dt = null;
                    try
                    {
                        fakeDS.ReadXml(dlg.FileName);

                        dt = fakeDS.Tables[0].Copy();

                        TA.DeleteQuery();
                        eDS.mojaTabela.Merge(dt);

                        manager.mojaTabelaTableAdapter.Update(eDS.mojaTabela);

                        MessageBox.Show("Učitavanje završeno.");
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("GRESKA: " + error.Message);
                    }
             }              

Aplikacija na kojoj radim bi trebalo da omoguci korisnicima ucitavanje XML fajlova na dnevnom nivou (na zahtev korisnika).
Baza koju koristim je MySQL 5.5 i VisualStudio2010.

Hvala
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1570 Profil

icon Re: Ucitavanje xml datoteke u MySQL tabele, C#04.10.2012. u 12:09 - pre 140 meseci
A što ti je problem da prvo učitaš XML pa u njemu razdvojiš cvorove za tabele i onda svaku za sebe prebaciš u bazu?
 
Odgovor na temu

vortex77

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



+1 Profil

icon Re: Ucitavanje xml datoteke u MySQL tabele, C#04.10.2012. u 12:21 - pre 140 meseci
Ok, posle trazenja uspeo sam da pronadjem delimicno resenje:

Code:

          if (result == true)
              {                  
                    mt1TableAdapter mt1_TA = new mt1TableAdapter();
                    mt2TableAdapter mt2_TA = new mt2TableAdapter();
                    manager = new TableAdapterManager();       

                    xmlDS = new DataSet();
                    dt = null;

                    try
                    {                     
                        xmlDS.ReadXml(dlg.FileName,XmlReadMode.InferTypedSchema);
                        MessageBox.Show(xmlDS.Tables.Count.ToString());
                        MessageBox.Show(""+ eDS.Tables[eDS.Tables.IndexOf(xmlDS.Tables[0].TableName)].TableName);

                        for (int i = 0; i < xmlDS.Tables.Count; i++)
                        {                          
                            dt = xmlDS.Tables[i].Copy();

                           eDS.Tables[eDS.Tables.IndexOf(xmlDS.Tables[i].TableName)].Merge(dt);                           
                        }

                        mt1_TA.Update(eDS.mt1);
                        mt2_TA.Update(eDS.mt2);

                        MessageBox.Show("Učitavanje završeno.");
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("GRESKA: " + error.Message);
                    }              
            }

Ovde sam naleteo na dva problema:
1. Ako tabele ucitam u DataSource (iz MySQL-a), tabele mt1 i mt2 onda dobijam gresku ako se DataType iz XML-a razlikuje od postojeceg
2. Update komanda radi vrlo sporo (za 15k slogova oko 7-10min)

Da li neko mogao da mi pomogne da resim ove probleme?

Hvala


[Ovu poruku je menjao vortex77 dana 05.10.2012. u 14:57 GMT+1]
 
Odgovor na temu

[es] :: .NET :: Ucitavanje xml datoteke u MySQL tabele, C#

[ Pregleda: 2024 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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