Non riesco a visualizzare i numeri dopo la virgola

sabato 14 maggio 2011 - 12.55

nappo Profilo | Newbie

Ciao a tutti, ho creato una tabella Entrate con sqlserver 2008 con i seguenti campi
Rif(chiave con aumento progressivo automatico)
Data (date,null)
Importo1,Importo2,Importo3 (numeric 9,2,null) e sto scrivendo il codice con visual basic 2008. Il mio problema sta nel fatto che salvando gli importi inseriti ad esempio 100,52 nel dgv visualizzo 100,00 .
Ho verificato sql e il debug da OK quindi l'errore è sicuramente nel codice visual basic

Private Sub salva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles salva.Click
Me.conn.Open()
Dim j, jtot As Integer
For j = 0 To jriga (jriga = ultima riga salvata in precedenza)
Dim Edata, Erif As String
Dim impo1, impo2, impo3 As Double
ERif = DataGridView1.Rows(j).Cells(0).Value
EData = DataGridView1.Rows(j).Cells(1).Value
impo1 = DataGridView1.Rows(j).Cells(2).Value
impo2 = DataGridView1.Rows(j).Cells(3).Value
impo3 = DataGridView1.Rows(j).Cells(4).Value
Dim entrate As String = "UPDATE Entrate SET Data = '" & Edata & "',Importo1 = '" &
impo1 & "',Importo2 = '" & impo2 & "',Importo3 = '" & impo3 & "'
WHERE Rif = '" & Val(ERif) & "'"
Dim cmdentrate As SqlCommand = New SqlCommand(entrate, conn)
Dim lgentrate As String = cmdentrate.ExecuteNonQuery
Next
j = jriga
jtot = DataGridView1.RowCount - 2
If jtot < j Then
MsgBox("Inserisci record") 'SALVARE NUOVI DATI
Else
Do While j <= jtot
Me.conn.Close()
Me.conn.Open()
Dim EData, risultato As String
Dim nimpo1, nimpo2, nimpo3, EImpo1, EImpo2, EImpo3 As Double
'ERif = DataGridView1.Rows(j).Cells(0).Value
EData = DataGridView1.Rows(j).Cells(1).Value
EImpo1 = DataGridView1.Rows(j).Cells(2).Value
EImpo2 = DataGridView1.Rows(j).Cells(3).Value
EImpo3 = DataGridView1.Rows(j).Cells(4).Value
Dim nuovoRif As New System.Data.SqlClient.SqlCommand( _
"SET NOCOUNT ON; INSERT INTO Entrate(Data,Importo1,Importo2,Importo3)" & _
"VALUES ('" & EData & "', '" & EImpo1 & "', '" & EImpo2 & "', '" & EImpo3 & "')" & _
"SELECT SCOPE_IDENTITY() AS Rif;", conn)
risultato = nuovoRif.ExecuteScalar()
DataGridView1.Rows(j).Cells(0).Value = Val(risultato)
MessageBox.Show("Il nuovo ID inserito è " & risultato)
j = j + 1
Loop
End If
Me.conn.Close()
Dim jins As Integer = j - jriga
MsgBox("inserito " & jins & " righe") (conta le righe inserite)
jriga = j
End Sub
Ho provato diverse soluzioni ma arrivato alla riga risultato = nuovoRif.ExecuteScalar()
va in errore (impossibile convertire da varchar in numeric)
Sapreste aiutarmi a risolvere il problema?

lbenaglia Profilo | Guru

>Dim entrate As String = "UPDATE Entrate SET Data = '" & Edata
>& "',Importo1 = '" &
>impo1 & "',Importo2 = '" & impo2 & "',Importo3 = '" & impo3 &
>"'
>WHERE Rif = '" & Val(ERif) & "'"
...

Ciao,

Se utilizzi gli importi per generare i comandi SQL concatenandoli in una "stringona" ricorda che il separatore decimale per SQL Server è SEMPRE il punto (.) indipendentemente dalle regional options del client o della lingua di default associata alla login.
Questa tecnica inoltre ti espone a pericolosissimi attacchi di SQL Injection.
In questo articolo di Ale ti viene proposto l'utilizzo di comandi parametrici che oltre a metterti al sicuro da quel genere di attacchi, risolvono alla radice il problema che hai evidenziato dato che i parametri sono tipizzati e non occorre generare alcuna stringa:
http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

nappo Profilo | Newbie

Grazie per la tua risposta.In effetti con il punto non va piu' in errore,ma non sono ancora riuscito a risolvere il problema ora il risultato inserendo es. 123.45 diventa 12345.0

carloalberto Profilo | Junior Member

Se componi la stringa di update non utiliZzare variabili double ma stringa . Quindi nelle variabile impo1 ad esempio ci metti il vare 1234.56. E lo concateni nella stringa sql, sicuro che ad sql ci arriva il valore originario senza conversioni. Ciao
Carlo Alberto
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5