Comando "Where in" Sql Server 2008 Express.

lunedì 08 febbraio 2010 - 21.34

Geronimo79 Profilo | Junior Member

Salve a tutti gli utenti di questo bellissimo sito.Programmo in vb.net e Sql Server 2008 express.Ho un problema da risolvere un pò difficile per me. Ho una textbox1 che viene popolata a "runtime", attraverso un codice specifico, di una serie di numeri "decimal (11,0), quindi con lunghezza 11, in modo tale da avere la textbox stessa popolata con es. 23234567654,45444667890,54445332210, ecc.ecc.ecc... Inserisco il seguente codice nell'evento click di un button al fine di procedere ad un aggiornamento mirato dei record che mi interessano:

Dim strCn As String = "stringa di connessione..ecc.ecc..."
Dim cn As New SqlConnection(strCn)
Dim cmd As New SqlCommand("SELECT BARCODE FROM tabprod WHERE BARCODE in ('" & Me.TextBox1.Text & "')UPDATE tabprod SET prodotti =('" & Me.TextBox2.Text & "')WHERE BARCODE in ('" & Me.TextBox1.Text & "')", cn)
cn.Open()
cmd.ExecuteNonQuery()
cn.close

mi viene restituito il seguente msg di errore:"Errore di overflow aritmetico durante la conversione di varchar nel tipo di dati numeric".
Non sò come intervenire per correggere l'errrore.Spero qualcuno possa aiutarmi.
Grazie e un saluto.

MarKonE Profilo | Guru

Ciao, sembra che il sottostante campo numerico della tabella sia definito come un tipo limitato ad un numero più piccolo di quello che tenti di inserire.

Come sono definiti i campi della tabella ? Nello specifico..il campo che corrisponde al valore della TextBox1.. di che tipo è precisamente ?

CIAOOO


My Blog... http://blogs.dotnethell.it/Mark/

Geronimo79 Profilo | Junior Member

Scusa avevo sbagliato prima.....avevo scritto decimal (11,0) invece Il campo della tabella in questione è di tipo numeric(11, 0).

MarKonE Profilo | Guru

>Scusa avevo sbagliato prima.....avevo scritto decimal (11,0)
>invece Il campo della tabella in questione è di tipo numeric(11,
>0).

La precisione minima del tipo numeric sembra essere 1 e non 0 :

http://msdn.microsoft.com/it-it/library/ms187746.aspx

Ciao !


My Blog... http://blogs.dotnethell.it/Mark/

lbenaglia Profilo | Guru

>La precisione minima del tipo numeric sembra essere 1 e non 0:
>
>http://msdn.microsoft.com/it-it/library/ms187746.aspx

Infatti la precision in NUMERIC(11,0) è 11 (lo scale è 0)

DECLARE @n NUMERIC(11, 0) = 12345678901; SELECT @n AS n; /* Output: n --------------------------------------- 12345678901 (1 row(s) affected) */

In SQL Server DECIMAL e NUMERIC sono sinonimi, ma lo standard ANSI SQL 2003 (§6.1 Data Types) prevede questa piccola differenza:

<exact numeric type> ::=
NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| SMALLINT
| INTEGER
| INT
| BIGINT

...

21) NUMERIC specifies the data type exact numeric, with the decimal precision and scale specified by the <precision> and <scale>.
22) DECIMAL specifies the data type exact numeric, with the decimal scale specified by the <scale> and the implementation-defined decimal precision equal to or greater than the value of the specified <precision>.

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

lbenaglia Profilo | Guru

>Dim cmd As New SqlCommand("SELECT BARCODE FROM tabprod WHERE
>BARCODE in ('" & Me.TextBox1.Text & "')UPDATE tabprod SET prodotti
>=('" & Me.TextBox2.Text & "')WHERE BARCODE in ('" & Me.TextBox1.Text & "')", cn)
...
>mi viene restituito il seguente msg di errore:"Errore di overflow
>aritmetico durante la conversione di varchar nel tipo di dati
>numeric".
>Non sò come intervenire per correggere l'errrore.

1) A cosa server quella SELECT seguita dall'UPDATE?
2) Perché racchiudi tra singoli apici il valore restituito dalla proprietà Text se è numerico?
3) Sei sicuro che il valore sia numerico al più di 11 cifre intere?
4) Sei al corrente che quel codice si presta particolarmente bene ad attacchi di SQL Injection?
http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx

>Grazie e un saluto.
Prego.

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

Geronimo79 Profilo | Junior Member

Quindi ho sbagliato il tipo dati????
Come dovrei impostare questo tipo di query????

lbenaglia Profilo | Guru

>Quindi ho sbagliato il tipo dati????
Boh, hai postato uno stralcio di codice, manca tutto il contorno

>Come dovrei impostare questo tipo di query????
Cosa devi fare? Qual è il risultato atteso?

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

Geronimo79 Profilo | Junior Member

questi numeri di 11 cifre provengono da un'altra tabella....in pratica vado a estrapolare da una tabella alcuni valori che sono comuni a quest'altra con cui poi procedo a fare un update....
Sql injection non lo conosco

Come potrei risolvere???? C'è un modo per farlo???'
Non sono esperto del settore.....
Grazie.

lbenaglia Profilo | Guru

>questi numeri di 11 cifre provengono da un'altra tabella....in
>pratica vado a estrapolare da una tabella alcuni valori che sono
>comuni a quest'altra con cui poi procedo a fare un update....
Mettiti nei nostri panni, come possiamo scodellarti la soluzione che vorresti a partire da queste informazioni?

>Sql injection non lo conosco
E' per questo che ti ho linkato l'articolo di Ale
Su, prova a dargli una bella lettura.

>Grazie.
Prego.

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

Geronimo79 Profilo | Junior Member

in pratica nella textbox1 ho tutta una serie di numeri a 11 cifre che vorrei visualizzare in un datagridview bindato e fare un update
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