[Mono] NULL values in columns in DataReader

Pagina: 1
Acties:

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ik ben wat aan het testen met Mono (0.30.2, op windows) en ik loop tegen het fenomeen aan dat wanneer ik dit doe:

bool isNull = (myReader[columnIndex]==System.DbNull.Value);

is isNull altijd false, terwijl de columns wel degelijk NULL bevatten af en toe. Is het zo dat in de Mono providers, NULL niet wordt vervangen door System.DbNull.Value? Ik kan dit niet testen ivm het gebrek aan debugger. (ik heb .NET 1.1 code gecompileerd met mcs en de mono compilers. Data zonder NULL values werkt wel, (althans komt door de allereerste test: entity fetch test) maar met een NULL value krijg ik problemen omdat de test zoals hierboven beschreven niet slaagt).

Iemand een idee?

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


Verwijderd

Ik heb een tijdje terug ook met Mono gewerkt en ook met de DbNull.Value. Dit gaf bij mij geen problemen. Maar nu had ik messchien geen NULL waardes in me DB staan.

Ik heb die code hier niet zo bij de hand. Maar ik zou is even kijken of ik hier weer aan kan komen. Verder gaf mijn zoektocht op google.com toch aardig wat voorbeeld code van DbNull.Value in Mono. Dus het lijkt mij geen bug in Mono.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Wat ik vond op google mbt dbnull.value en mono was dat ze nog niet wisten wat ze ermee moesten. Ik ga wel even prutsen met wat printstatements. Is er een manier om te debuggen met mono? Of heb je daar die monodevelop voor nodig?

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


  • tijn
  • Registratie: Februari 2000
  • Laatst online: 25-05 12:24
EfBe schreef op 04 maart 2004 @ 09:55:
Is er een manier om te debuggen met mono? Of heb je daar die monodevelop voor nodig?
De command-line debugger schijnt het wel te doen (zit die in de Windows versie?). Ik heb er zelf geen ervaring mee want ik deploy eigenlijk alleen maar op Mono en ontwikkel gewoon met VS.NET op Windows wat overigens wondergoed werkt met de laatste versies.
Over dat DBNull.Value probleem: dat kan nogal afhangen van welke provider je gebruikt. Bij Npgsql (Postgres) werkt DBNull.Value in ieder geval feilloos. Ik kan me ook niet voorstellen dat ze hierbij zouden willen afwijken van het MS framework.

Cuyahoga .NET website framework


Verwijderd

Op de command debuger na is er geen normale debugger naar mijn weten. En MonoDevelop is nog niet gereleased dacht ik.
De source van me project heb ik weer terug. Ik maakte ook gebruik van DbNull.Value, maar er zatten nooit NULL waardes in. Maar dus even snel een NULL waarde in de Database gegooit en ook bij mij werkte dit niet. Hij zij gewoon dat het niet NULL was en klapte later in de source op ze bek omdat het wel NULL was.

Ik weet hiet nu ook niet zo een oplossing voor. Moet jij het verplicht onder MONO hebben?

[ Voor 7% gewijzigd door Verwijderd op 04-03-2004 10:42 . Reden: Cristal moet leren type! ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 04 maart 2004 @ 10:40:
Op de command debuger na is er geen normale debugger naar mijn weten. En MonoDevelop is nog niet gereleased dacht ik.
Ok, bedankt. Ik ga wel de good old printf-style debugging toepassen ;)
De source van me project heb ik weer terug. Ik maakte ook gebruik van DbNull.Value, maar er zatten nooit NULL waardes in. Maar dus even snel een NULL waarde in de Database gegooit en ook bij mij werkte dit niet. Hij zij gewoon dat het niet NULL was en klapte later in de source op ze bek omdat het wel NULL was.
EXACT hetzelfde heb ik dus ook :)
Ik gebruik de Sqlserver provider van Mono. Ik kan wel een conditional compile toevoegen in de sourcecode voor dit, moet alleen weten wat er dan wel in zit ;). Het punt is wel dat het generieke code is die met alle providers moet werken, en als de een het wel doet en de ander niet, is het ondoenlijk er fatsoenlijke code voor te schrijven. De Datareader heeft een property waarmee je kunt testen of een field NULL is, maar die is echt mega-traag op .NET, en ik verwacht niet veel beter op Mono.
Ik weet hiet nu ook niet zo een oplossing voor. Moet jij het verplicht onder MONO hebben?
Nee, ik was aan het kijken of ik de gegenereerde code van LLBLGen Pro op mono werkend kreeg. Na wat makefiles te hebben gemaakt lukte het compileren in ieder geval. Ging op zn muil in de Xml export code, maar ik geloof dat die nog niet geheel af zijn in mono, dus dat is op zich niet zo'n punt. Toen liep ik tegen deze issue aan. Ik denk dat ik voor Mono maar die trage test op NULL inbak via een conditional compile. (ik hoop tenminste dat mcs conditional compiles aankan. Lijkt me wel)

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
EfBe schreef op 04 maart 2004 @ 11:37:
[...]

Ok, bedankt. Ik ga wel de good old printf-style debugging toepassen ;)
Trace.WriteLine() de gekste. \o/

https://fgheysels.github.io/


Verwijderd

EfBe schreef op 04 maart 2004 @ 11:37:
Ok, bedankt. Ik ga wel de good old printf-style debugging toepassen ;)
* EfBe is nog wel een tijdje zoet! :Y)
EfBe schreef op 04 maart 2004 @ 11:37:
...knip...
De Datareader heeft een property waarmee je kunt testen of een field NULL is, maar die is echt mega-traag op .NET, en ik verwacht niet veel beter op Mono.
...knip...
Dat is natuurlijk ook nog een oplossing. Ik Heb het zelf niet getest. Maar hoeveel trager is mega-traag? Is dat echt niet meer te doen?

[ Voor 6% gewijzigd door Verwijderd op 04-03-2004 12:55 ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 04 maart 2004 @ 12:53:
[...]
* EfBe is nog wel een tijdje zoet! :Y)
haha neee :) Ik ben opgegroeid met printf debugging aangezien het alternatief was command line debuggers en op een 80x24 schermpje wil je dat echt niet. De plek in kwestie is niet zo moeilijk te debuggen met wat traces :)
Dat is natuurlijk ook nog een oplossing. Ik Heb het zelf niet getest. Maar hoeveel trager is mega-traag? Is dat echt niet meer te doen?
Echt significant. 25% van de tijd was de routine die alleen maar door de fields van een row fietste van een datareader bezig in de IsDbNull(ordinal) method. Die heb ik toen vervangen door de expressie in de topic start post en de routine was ineens significant sneller dus :) (die expressie kost nauwelijks tijd). Maar goed, as't net kin sa't mat, dan mat it mar sa't kin ;)

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


Verwijderd

EfBe schreef op 04 maart 2004 @ 12:58:
...heb ik toen vervangen door de expressie in de topic start post en de routine was ineens significant sneller dus :) (die expressie kost nauwelijks tijd). Maar goed, as't net kin sa't mat, dan mat it mar sa't kin ;)
offtopic:
Ja vind je het gek als hij altijd gewoon true returned :o

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 04 maart 2004 @ 13:03:
[...]


offtopic:
Ja vind je het gek als hij altijd gewoon true returned :o
Grapjas :) Ik heb het over .NET code ;) niet over mono-code. (profiled met nprof). Geen idee of het traag/snel is op mono. Ik zal zo ff een poging wagen het aan de gang te krijgen.

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


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Nou, IsDbNull(ordinal) werkt wel. Heb het maar als bug gefiled. Toen kwam ik de volgende bug tegen: Wanneer je de value van een parameter op null zet, genereert hij als SQL @parameter= ipv @parameter=NULL. Ook maar gefiled als bug. Het moet nl. niet zo zijn dat je C# code niet gewoon kunt porten naar mono zonder allerlei aparte code.

Ik wacht wel op een latere versie van mono :)

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

Pagina: 1