27 messaggi dal 07 luglio 2008
Ciao a tutti e grazie in anticipo per l'aiuto

Nel mio server di sviluppo (pertanto vi chiederei di lasciar perdere per adesso tutte le considerazioni sull'uso dei parametri e pericoli di sql injection etc etc) ho una tabella con un campo "Importo" impostato a decimals(18,2)

Valorizzo questo campo attraverso una textbox in un webform

Il codice:

Dim x as Decimal = miotxt.text
ho provato anche
Dim x as Decimal = Convert.Todecimal(miotxt.text)

e come Sql:

"INSERT INTO MiaTabella (Importo) VALUES (" & x & ")"
ho provato anche
"INSERT INTO MiaTabella (Importo) VALUES (CONVERT(decimal(18,2)," & x & "))"

tutto funziona ma il problema è che nella tabella i decimali vengono trasformati in 00 ovvero se nella textbox scrivo 12,58 nella tabella viene scritto il valore 12,00

Come devo fare perchè i decimali vengano scritti correttamente nel DB ?

Grazie a tutti e ciao

Come sistema utilizzo Windows Server 2008 R2, FrameWork 4.0, Sql Server 2008 R2, VS 2012
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
agserna ha scritto:

Nel mio server di sviluppo (pertanto vi chiederei di lasciar perdere per adesso tutte le considerazioni sull'uso dei parametri e pericoli di sql injection etc etc)

ROTFL


ho una tabella con un campo "Importo" impostato a decimals(18,2)
Valorizzo questo campo attraverso una textbox in un webform
Il codice:

Dim x as Decimal = miotxt.text
ho provato anche
Dim x as Decimal = Convert.Todecimal(miotxt.text)

e come Sql:

"INSERT INTO MiaTabella (Importo) VALUES (" & x & ")"
ho provato anche
"INSERT INTO MiaTabella (Importo) VALUES (CONVERT(decimal(18,2)," & x & "))"

tutto funziona ma il problema è che nella tabella i decimali vengono trasformati in 00 ovvero se nella textbox scrivo 12,58 nella tabella viene scritto il valore 12,00

Come devo fare perchè i decimali vengano scritti correttamente nel DB ?

Grazie a tutti e ciao

Come sistema utilizzo Windows Server 2008 R2, FrameWork 4.0, Sql Server 2008 R2, VS 2012


Dim x as Decimal = Convert.Todecimal(miotxt.text)
cosa c'e' in "x" dopo la conversione? e' probabile che ci sia "12" e non "12.58"... prova a verificare.. :)
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
27 messaggi dal 07 luglio 2008
Ciao e grazie per la risposta

Avevo gia controllato e x contiene il valore corretto ovvero 12,58

Potrebbe essere qualche impostazione di localizzazione di Sql Server?

Lo chiedo perchè facendo delle prove ho visto che con questo codice funziona correttamente:

Dim x as String = miotxt.text
x.replace(",",".")'sostituisco la virgola con il punto

e come Sql:

"INSERT INTO MiaTabella (Importo) VALUES (" & x & ")"

Nella tabella viene scritto il valore corretto 12,58 (con la virgola)

Quache idea?
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
le localizzazioni vanno bene solo se utilizzi un command object che automagicamente risente delle stesse, e converte "123.456,78" in "123,456.78" e quindi ancora in decimal==123456.78..
diversamente, SQL Server accetta solo il separatore dei decimali, e solo come "." e non come ","...
il tuo decimal di Vb riesce a convertirlo seguendo anche esso la localizzazione italiana, ma poi non puoi postarlo come comand DML specifico senza "trasformarlo" nella stringa di testo che SQL Server si aspetta, appunto, il separatore come "."....
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
27 messaggi dal 07 luglio 2008
Ciao e grazie per la risposta.

Se ho capito bene non è possibile passare il valore 12,58 via DML ma solo come 12.58

Utilizzando i parametri oppure una stored procedure le cose cambierebbero?

Ciao e ancora grazie!
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
e scusa il ritardo :)

agserna ha scritto:


Se ho capito bene non è possibile passare il valore 12,58 via DML ma solo come 12.58


si, e' corretto...


Utilizzando i parametri oppure una stored procedure le cose cambierebbero?

relativamente all'utilizzo di una stored procedure, la cosa non cambia, il valore decimale deve essere sempre espresso in 12.58..
con l'utilizzo invece dei parametri tipo SqlParameter, il .Net Framework si occupa personalmente di interpretare il valore 12,58 per poi passarlo correttamente, sia la chiamata del codice DML dinamico [ INSERT INTO dbo.xxx VALUES ($paramDecimal, ....); ]
che tramite apposita stored procedure [EXEC dbo.usp_DoSomething @paramDecimal, .... ; ]

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.