[C# / Delphi7] Delphi TDataSet naar C# DataSet

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

  • DinX
  • Registratie: Februari 2002
  • Laatst online: 08:58

DinX

Motormuis

Topicstarter
Even een korte beschrijving van het probleem.

We zitten met 2 verschillende databases, een DBISAM en een MSSQL database. We willen gegevens uit die DBISAM kunnen opvragen, om te bekijken, en eventueel weg te schrijven naar de DBISAM.

Voor query's te kunnen uitvoeren op de DBISAM database hebben we een webservice die aan string wordt aangeboden. Deze string bevat de query die hij moet uitvoeren. Vervolgens zou hij een DataSet (liefst) moeten teruggeven aan de webservice die zorgt voor het aanmaken van allerlei verschillende query's adhv parameters die meegegeven worden (bvb Retrieve(string user, string datum), Retrieve(string user, string begindatum, string einddatum),...).

We gebruiken een aparte webservice voor de DBISAM database omdat deze bijna alleen maar aan te spreken is vanuit Delphi, en we voor de rest allemaal C# gebruiken.

Alles goed en wel, de queries worden doorgestuurd, en kunnen worden uitgevoerd. Maar nu moeten de records nog teruggestuurd worden naar de MSSQL webservice.
We dachten dit eerst met een DataSet te doen, maar C# kan niet overweg met een doorgestuurde Delphi DataSet.
Is er nu toch een manier om een DataSet terug te sturen ?

Inmiddels is mijn collega (die zorgt voor de Delphi programmatie, ik doe de C#) bezig met het ombouwen van een stuk code dat hij gevonden heeft om in Delphi een DataSet om te zetten in xml, en die xml data dan als string terug te sturen.
Dit doet hij goed, maar de xml heeft nog niet de juiste structuur.

Morgen zou dit opnieuw bekeken worden.
Maar voordat er morgen een halve dag verloren gaat met het aanpassen van die code wou ik toch even kijken of er hier geen mensen een betere / simpelere manier kennen om records van een query in een Delphi webservice, terug te geven aan een C# service.

ODBC in C# gebruiken is geen optie, omdat deze driver niet stabiel genoeg is.

[ Voor 4% gewijzigd door DinX op 13-05-2004 23:50 ]

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Ik denk dat XML wel een mooie optie is. Ik weet niet hoeveel deze service gebruikt gaat worden en om hoeveel data het gaan?

  • Jabbah
  • Registratie: Februari 2004
  • Laatst online: 12:03
Ik denk ook XML. Zorg dat je webservice ipv een Delphi DataSet, XML terugstuurt met daarin de resultaten van je query. De .NET DataSet heeft een ReadXml methode om deze XML in de DataSet te laden. Je kan de XML dan nog eerst valideren door een XSD in je DataSet te laden.

  • DinX
  • Registratie: Februari 2002
  • Laatst online: 08:58

DinX

Motormuis

Topicstarter
Dacht ik dus ook al. Nu de xml de juiste structuur geven.
Want de code die we gevonden hadden genereert een TDataSet in xml, dus die kan je dan nog altijd niet uitlezen in C#. Want C# verwacht in die xml een C# DataSet structuur.

Optie is dus om de nodes zelf aan te maken met een for-lus ofzo ?
Want nu krijg ik een xml door met volgende structuur:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
    <FIELDS>
        <FIELD attrname="TaakID" fieldtype="i4"/>
        <FIELD attrname="Datum" fieldtype="date"/>
        <FIELD attrname="Tijd" fieldtype="time"/>
        .
        .
        .
        </FIELDS>
        <PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/>
</METADATA>
<ROWDATA>
    <ROW  TaakID="27185" 
                Datum="20040512" 
                .
                .
                . />


Dit is dus niet iets wat je direct in een DataSet kan laden in C# lijikt me.
Want als je in C# bijvoorbeeld een xml aanmaakt van een DataSet dan heeft die deze structuur:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<tempDS xmlns="http://www.tempuri.org/tempDS.xsd">
    <tabelX>
        <kolom1> blabla </kolom1>
        <kolom2> blablabla </kolom2>
        <kolom3> bla </kolom3>
    </tabelX>
    <tabelX>
        <kolom1> blibli </kolom1>
        <kolom2> bliblibli </kolom2>
        <kolom3> bli </kolom3>
    </tabelX>
    .
    .
    .
</tempDS>


Heel wat simpeler dan die xml die nu wordt gegenereerd dus.
Dan kunnen we dus best die "for-lus-manier" gebruiken en zo de xml aanmaken ?

[ Voor 79% gewijzigd door DinX op 14-05-2004 09:55 ]

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride


  • tijn
  • Registratie: Februari 2000
  • Laatst online: 25-05 12:24
DinX schreef op 13 mei 2004 @ 23:28:
Inmiddels is mijn collega (die zorgt voor de Delphi programmatie, ik doe de C#) bezig met het ombouwen van een stuk code dat hij gevonden heeft om in Delphi een DataSet om te zetten in xml, en die xml data dan als string terug te sturen.
Dit doet hij goed, maar de xml heeft nog niet de juiste structuur.
Als het een Delphi ClientDataSet is zou je misschien kunnen zoeken of er toevalig al eens iemand een XSLT gemaakt heeft die Delphi ClientDataSets in .NET DataSets omzet.

Cuyahoga .NET website framework