[ mco @ 19.01.2005. 12:28 ] @
| Pozdrav,
Trenutno sam u fazi realizacije jedne male aplikacije koja treba da pristupi tabeli u SQL bazi na jednom serveru, dohvati izabrane podatke i te podatke smesti u drugu tabelu na nekom drugom serveru.
Generalno je sve rešeno osim jednog problema.
Problem je sledeći:
Pošto sam odlučila da koristim XML file kao među file za razmenu podataka, pojavio mi se problem sa elementima koji imaju null kao vrednost u tabeli baze.
Hoću da u rezultujućem xml file-u imam SVE elemente bez obzira da li su null ili imaju korisnu vrednost jer kada hoću da parsiram taj isti file i da upisujem red po red u destination table imam problem jer nemam sve kolone koje očekujem.
Čini mi se da sam nekad negde pročitala da mogu da nateram da se u XML fajl upiše i prazan element ali sad to ne mogu da nađem.
Kod koji koristim je otprilike:
"
conn.ConnectionString = connStr
conn.Open()
sqlStr = "select * FROM tbl1 "
cmd.CommandText = sqlStr
cmd.CommandType = CommandType.Text
cmd.Connection = conn
da.SelectCommand = cmd
da.Fill(ds)
conn.Close()
file = "file.xml"
Dim myStreamWriter As New StreamWriter(file)
ds.WriteXml(myStreamWriter)
myStreamWriter.Close()
"
Sql upit daje tabelu sa kolonama koje imaju null vrednosti u različitim redovima. U rezultujućem xml file-u, elementi sa null vrednostima nisu unesene a htela bih da budu.
Da li neko zna kako da to postignem?
Hvala unapred |
[ Vladan Ostojic @ 19.01.2005. 13:28 ] @
Kad snimas xml umjesto
ds.WriteXml(myStreamWriter)
pozovi
ds.WriteXml(myStreamWriter, XmlWriteMode.WriteSchema)
[ dusans @ 19.01.2005. 13:28 ] @
Standardno, DataSet ne podržava serijalizaciju u ovom obliku, tako da ako ručno parsiraš rezultujući XML moraćeš i ručno da ga praviš.
Druga jednostavnija varijanta je, normalno ako imaš i na drugoj strani mogućnost korištenja .Net-a, da koristiš ds.WriteXml(myStreamWriter, XmlWriteMode.WriteSchema) da bi uključila i strukturu DataSet-a u XML a zatim da tamo gde primaš taj XML njega pretvoriš nazad u DataSet. Ovo je inače i veoma slično načinu na koji se prenosi DataSet pri pozivu WebService-a.
Treći način je serijalizacija u XML zajedno sa strukturom (XmlWriteMode.WriteSchema) a zatim prvo parsiranje šeme na odredištu, a zatim i samih podataka.
Savet: Za komunikaciju između servera koristi WebService ukoliko je to moguće.
[ mco @ 20.01.2005. 08:06 ] @
Hvala, uspela sam da se "izborim" sa početnim problemom tako što sam proveravala da li je sadržaj elementa = Null, međutim, drugi problemi su iznikli.
Na primer, upisivanjem System.DBNull.Value u string koji predstavlja sql upit, ne rešava problem, dobijam SqlException.
"
If Equals(DBNull.Value, ds.Tables(0).Rows(i).Item(clmns(j))) = False Then
If ds.Tables(0).Rows(i).Item(clmns(j)).GetType Is GetType(String) Then
sqlStr = sqlStr & "'" & ds.Tables(0).Rows(i).Item(clmns(j)) & "', "
Else
sqlStr = sqlStr & ds.Tables(0).Rows(i).Item(clmns(j)) & ", "
End If
Else
sqlStr = sqlStr & System.DBNull.Value & ", "
End If
"
Kada ovaj string pokušam da izvršim direktno na SQL Serveru, dobijem istu poruku dok ne upišem u sve prazne pozicije 'null'.
Drugi problem se javio zbog imenovanja kolona tabele (na šta ne mogu da utičem). Kolona npr. ima ime '[element]'. U xml file-u se upiše 'element', bez []. Ja dohvatam nazive kolona u petlji i kreiram string. Unapred ne znam koje kolone ću dobiti kao rezultat pa ne mogu ni da dodajem [].
Kako da dobijem neizmenjene nazive kolona u xml file-u?
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.