[C#/SQL]Parameterwaarden anders behandeld als databasewaarde

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FoOnEeN
  • Registratie: Juli 2003
  • Laatst online: 21:20
Probleem: SQL server(2000) behandeld parameter waarden anders als degene die uit de database komen.
Als ik een numeric(19,6) parameter meegeef aan een stored procedure in mijn database en vervolgens de waarde uit de stored procedure terug krijg via een select, is deze ineens een factor 10^6 groter. Als ik in dezelfde stored procedure een select teruggeef op een waarde in een tabel die ook numeric(19,6) is gebeurt dit niet?

Voorbeeld:
SQL:
1
2
3
4
5
CREATE PROCEDURE blaat
 @inputVar = numeric(19, 6)   <- input variabele sp

SELECT tabelWaarde FROM dbTabel <- waarde is hier een kolom in tabel dbTabel met als datatype numeric(19,6)
SELECT @inputVar


Als ik als @inputVar de waarde 123,456789 meegeef, en de tabelWaarde kolom dezelfde waarde bevat krijg ik de volgende output:
123,456789 (tabelWaarde)
123456789 (@inputVar, zonder komma dus en 10^6 keer zo groot)

Nu kan ik best geloven waardoor deze waardeverandering komt, aangezien ik dit al eerder mee heb gemaakt. Dit komt namelijk doordat de database geinstalleerd is met en-US en de code in mijn testomgeving + asp.net omgeving draait op nl-NL. Echter tot nog toe was dit alleen een probleem in de output en kon je dit fixen dmv een localisatie meegeven aan de output functies.

Maar wat ik dus niet snap is waarom sql server mijn parameter waarde anders behandeld als de waarde die in de database staat? Wordt hier ergens nog iets aan localisatie meegegeven of iets dergelijks?

Ik kan het probleem overigens reproduceren door mijn lokale machine geforceerd op en-US te zetten, terwijl de database hier nl-NL is.

Ter verduidelijking: De waarden die ik terugkrijg van mijn sp komen alleen terug via SELECT, aangezien het er redelijk wat zijn. Er worden geen return of output variabelen gebruikt.

Edit:
Ik zie nu dat het probleem al optreed bij het parsen van de input. Bij het gebruik van een culture bij het parsen gaat het wel goed:
C#:
1
Decimal.TryParse(inputString, NumberStyles.Number, CultureInfo.CreateSpecificCulture("nl-NL"), out outputDecimal)


Echter kan ik niet 100% zeggen dat dit werkt omdat ik niet direct kan testen of dit op de betreffende server wel werkt, maar waarschijnlijk lost dit het probleem wel op. Topic kan wmb dus al dicht.

[ Voor 11% gewijzigd door FoOnEeN op 07-07-2010 15:59 . Reden: Oplossing gevonden ]