» »

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?
Asus G14 2023 - Ryzen 7940HS - 32GB DDR5 - GeForce RTX 4080 - 990 PRO 4TB

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?
Asus G14 2023 - Ryzen 7940HS - 32GB DDR5 - GeForce RTX 4080 - 990 PRO 4TB

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š?
Asus G14 2023 - Ryzen 7940HS - 32GB DDR5 - GeForce RTX 4080 - 990 PRO 4TB

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
Asus G14 2023 - Ryzen 7940HS - 32GB DDR5 - GeForce RTX 4080 - 990 PRO 4TB

Zgodovina sprememb…

  • spremenil: nuclear ()


Vredno ogleda ...

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

[c#] shrani text, tabele, slike

Oddelek: Programiranje
251506 (1112) klemen93
»

c# tiho tiskanje slik.

Oddelek: Programiranje
101936 (1607) OmegaM
»

Silverlight

Oddelek: Programiranje
161732 (1389) hodor
»

C# Problem

Oddelek: Programiranje
131249 (1045) joze67
»

[VB] Open

Oddelek: Programiranje
71526 (1365) Monster

Več podobnih tem