» »

C# - xml import v bazo

C# - xml import v bazo

nuclear ::

Pozdrav. Imam xml dokument katerega uporabljam za backupe.

Z datotekami manjšimi od 50MB nisem imel problema importa v bazo. Uporabljam to kodo:
 protected void uvoziPodatkeXML(string backup, int tabela, string destinacijaTabela)
        {
            DataSet reportData = new DataSet();

            FileStream filestream = File.OpenRead(lblPotIzvozi.Text + txtIme.Text + backup);
            BufferedStream buffered = new BufferedStream(filestream);
            reportData.ReadXml(buffered);

            //reportData.ReadXml(lblPotIzvozi.Text + txtIme.Text + backup);



            SqlConnection povezava = new SqlConnection(Convert.ToString(Session["cs"]));
            SqlBulkCopy sbc = new SqlBulkCopy(Convert.ToString(Session["cs"]), SqlBulkCopyOptions.KeepIdentity);
            povezava.Open();
            sbc.DestinationTableName = destinacijaTabela;
            sbc.WriteToServer(reportData.Tables[tabela]);
            sbc.Close();

            povezava.Close();
        }


Problem pa nastane če so fajli XML večji od 50, ker traja celo večnost.. Morda pozna kdo kakšen primer, ker na internetu povsod berem, kako je dataset najslabše kar lahko narediš z XML(traja predolgo), ne morem pa najti nobenega enostanvega primera, z drugo metodo.

Je kdo delal podobno? Kakšen primer?
Corsair 750D - VI Hero - i5 4670k - Corsair Dominator 32GB - 1080Ti - EVO 500GB
- Sabrent 1TB nVME - Corsair AX860i - Ducky Shine 3 Brown

keworkian ::

klik


Tole je dosti preprosto.
Obscenities in B-Flat

japol ::

K ti zamrzne pri odpiranju? Kolk velik xml si lahk odpru, pa da je še delalo in kolk časa ga je odpiralo.
primer:
private void button10_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = "D:\\";
            openFileDialog1.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                XmlTextReader reader = new XmlTextReader(openFileDialog1.FileName);
                System.Xml.XmlDocument datoteka = new System.Xml.XmlDocument();
                System.Xml.XmlDocument CompSpecs = new System.Xml.XmlDocument();// Set up the XmlDocument (CompSpecs) //

                CompSpecs.Load(reader); //Load the data from the file into the XmlDocument (CompSpecs) //
                dataGridView1.Rows.Add();

                System.Xml.XmlNodeList NodeList = CompSpecs.GetElementsByTagName("book");
                dataGridView1.Rows.Add(NodeList.Count - 1);

                for (int i = 1; i <= NodeList.Count; i++)
                {
                    //preberi kar pripada nodu (title)
                    System.Xml.XmlNodeList NodeList0 = CompSpecs.GetElementsByTagName("title");
                    dataGridView1.Rows[i - 1].Cells[0].Value = NodeList0[i - 1].ChildNodes[0].InnerText;
               }
            }
        }

Ka pa na podobno kot za access ali sql? Preko oledb? glej primer:
string cnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + path + "';";

                string dbCommand = "SELECT Column1, Column2, Column3 FROM Table1;";
                OleDbDataAdapter adapter = new OleDbDataAdapter(dbCommand, cnString);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                DataTable dt = ds.Tables[0];

sam še zmeri je prek dataset, jst nimam s tem problemou, je pa res da še nisem meu nobenga fajla tolk velicga.

Lahk prpopaš del xmlja k se ponavlja? Pa da pol mogoče več povem. Magari pošl na zs.

Mam še primerov, morm mal pobrskat.

nuclear ::

keworkian je izjavil:

klik


Tole je dosti preprosto.


sry komi dle videl, maš kaki primer za več tabel kot pa eno?
Corsair 750D - VI Hero - i5 4670k - Corsair Dominator 32GB - 1080Ti - EVO 500GB
- Sabrent 1TB nVME - Corsair AX860i - Ducky Shine 3 Brown

keworkian ::

Samo sheme naredis za n tabel pa je to to.
Obscenities in B-Flat

nuclear ::

sem naredil sheme, vendar imam en problem.. recimo imam 19 tabel. v aplikaciji uporabim nekaj zadev, tako se zapolne par 6 tabel, in exporta v xml, kjer se mi zapiše struktura za teh 6 tabel recimo..

ko hočem z bulk load improtat nazaj v bazo, pa mi javi sledečo napako(debugger):
Invalid character value for cast specification.


torej predvidevam, ker za preostale tabele v shemi ni dobil podatkov ali kaj?

probal sem s shemo za eno tabelo, in xml podatke za eno tabelo in dela(tisti standardni primer)..

je mogoče kaj potrebno nastaviti ko več tabel kot pa eno importaš?
Corsair 750D - VI Hero - i5 4670k - Corsair Dominator 32GB - 1080Ti - EVO 500GB
- Sabrent 1TB nVME - Corsair AX860i - Ducky Shine 3 Brown

Zgodovina sprememb…

  • spremenil: nuclear ()

keworkian ::

Ta character value je verjetno narobe iz tabele prebral, tam kjer imas dt:type. On bi rad castal v drug tip ampak ne more.
Obscenities in B-Flat

nuclear ::

Aha ok, se pravi ne rabiš nič dodatnega za več tabel povezanih, kot pa primer za eno?

            SQLXMLBulkLoad3Class objBL = new SQLXMLBulkLoad3Class();
            objBL.ConnectionString = "provider=sqloledb;" + Convert.ToString(Session["cs"]); //cstring
            objBL.ErrorLogFile = "error.xml";
            objBL.KeepIdentity = false;
            objBL.XMLFragment = true;
            objBL.SchemaGen = true;
            objBL.BulkLoad = true;
            objBL.Execute(lblPotIzvozi.Text + txtIme.Text + "xmlShema.xml", lblPotIzvozi.Text + txtIme.Text + backup); //shema, xml


? Ker sem bral na gogolu, da so problemi z več tabelami? Tiste tipe mam pa vse iste, damn,.

bump
Corsair 750D - VI Hero - i5 4670k - Corsair Dominator 32GB - 1080Ti - EVO 500GB
- Sabrent 1TB nVME - Corsair AX860i - Ducky Shine 3 Brown

Zgodovina sprememb…

  • spremenil: nuclear ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c#] shrani text, tabele, slike

Oddelek: Programiranje
251405 (1011) klemen93
»

c# tiho tiskanje slik.

Oddelek: Programiranje
101828 (1499) OmegaM
»

Silverlight

Oddelek: Programiranje
161625 (1282) hodor
»

C# Problem

Oddelek: Programiranje
131166 (962) joze67
»

[VB] Open

Oddelek: Programiranje
71441 (1280) Monster

Več podobnih tem