[.NET] (Typed Dataset) = (Untyped Dataset)

Pagina: 1
Acties:

  • MrBrown
  • Registratie: Augustus 2000
  • Laatst online: 11-06 15:51

MrBrown

Reservoir Dog

Topicstarter
Wij zijn een beetje aan het uitzoeken wat je nou allemaal met datasets kan doen.

Nu komen we bij het volgende probleem:
We hebben van MS een SQLHelper class, die oa een aantal methoden bevat voor het vullen van Datasets.

Bijvoorbeeld:
code:
1
2
3
4
Public Overloads Shared Function ExecuteDataset
                  (ByVal connectionString As String, _
                    ByVal commandType As CommandType, _
                    ByVal commandText As String) As DataSet


Deze methode geeft dus een dataset terug. Nu willen wij ook gebruik gaan maken van Typed datasets, en dan het liefst in combinatie met de generieke methodes van die SQLHelper.

De vraag: Is het mogelijk een untyped dataset op een of andere manier te casten naar een typed dataset? Ik begrijp dat dit potentieel problemen geeft als de data in de untyped dataset niet voldoet aan het schema van de typed dataset, maar dat is geen probleem. Ik wil dus dat als de data van de untyped dataset wel voldoet aan dat schema, dat het dan goed gaat..

Powered by Manetti (compiled by Jura)


  • JohanDM
  • Registratie: Augustus 2002
  • Laatst online: 16-07-2021

JohanDM

Optimist

Een gewone typecast kan niet, omdat die in de verkeerde richting gaat. Wat wel gaat, als het schema klopt, is de data uit de untyped dataset mergen in de typed dataset met de Merge method:
Visual Basic:
1
typedDS.Merge(untypedDS)

Dan bevat de typedDS alle data van de untypedDS.

In deze situatie echter, zou ik eerder een lege dataset aan de helperfunctie mee geven op een generieke manier:
Visual Basic:
1
2
3
4
5
Public Overloads Shared Sub ExecuteDataset
                  (ByVal connectionString As String, _
                   ByVal commandType As CommandType, _
                   ByVal commandText As String, _
                   ByVal ds As DataSet)

Aan het ds argument kun je nu een lege typed of untyped dataset meegeven, omdat dit de juiste richting van casting is.

offtopic:
Het ds argument moet ByVal doorgegeven worden, anders gaat de cast niet werken omdat die maar in één richting kan gebeuren. Overigens wordt niet de dataset maar de reference naar de dataset byval doorgegeven. Dit is dus geen probleem voor het opvullen ervan.

[ Voor 1% gewijzigd door JohanDM op 09-01-2003 18:10 . Reden: typvoud ]

"Two things are infinite: the universe and stupidity. And the former I'm not so sure about." -- Albert Einstein


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Een typed dataset is een gegenereerde class die derived van DataSet. Om effectief gebruik te maken van je typed dataset is het verstandig je typed dataset te gebruiken in je code, dit achteraf nog een keer wijzigen is wel wat lastig.

Je kunt een dataset wel proberen te downcasten naar een typed dataset, maar at runtime kan dit falen (als het object niet van het type is van je typed dataset).

Typed datasets zijn een truukje, mogelijk gemaakt met een generator die bij de SDK wordt geleverd maar die smerige code aflevert. Let daar dus wel op.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com