PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

di il
22 risposte

PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

Buon pomeriggio a tutti,

premetto che sono abbastanza nuovo di questo mondo e sto studiando piano piano per mettermi al passo nell'ambito della programmazione, per cui mi scuso in anticipo se la domanda che vi farò può essere molto banale.
Ho un form dove carico un excel per aggiornare un tabella sql, vi riporto qui di seguito il codice:

Imports System.Data.SqlClient
Imports System.Data.OleDb
Imports System.Reflection
Imports System.IO
Imports Excel = Microsoft.Office.Interop.Excel

Public Class frmAggAcquisto

    Dim con As New SqlConnection("Data Source=SRV-APP01;Initial Catalog=UFFICIALE;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=password;Connect Timeout=120;")
    Dim cmd As New SqlCommand

    Dim con2 As New OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0; Data Source=\\Srv-app01\pcm\Listini di Acquisto\LISTINO_MASTER.xlsx; Extended Properties=Excel 8.0;")

    Private Sub frmAggAcquisto_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        con2.Open()
        Dim da As New OleDbDataAdapter("Select * from [LISTINO_MASTER$]", con2)
        Dim dt As New DataTable
        da.Fill(dt)
        dtgAggAcquisto.DataSource = dt

        DoubleBuffered(dtgAggAcquisto, True)

    End Sub

    Public Shadows Sub DoubleBuffered(dtgAggAcquisto As DataGridView, setting As Boolean)
        Dim dtgAggAcquistoTipe = dtgAggAcquisto.GetType()
        Dim pi As PropertyInfo = dtgAggAcquistoTipe.GetProperty("DoubleBuffered", BindingFlags.Instance Or BindingFlags.NonPublic)
        pi.SetValue(dtgAggAcquisto, setting, Nothing)
    End Sub

    Private Sub btnAggiorna_Click(sender As System.Object, e As System.EventArgs) Handles btnAggiorna.Click

        For i As Integer = 0 To dtgAggAcquisto.Rows.Count - 1

            cmd = con.CreateCommand()
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "UPDATE LI10_LISTARTIC SET LI10_PREZZO = '" & dtgAggAcquisto.Rows(i).Cells(1).Value & "' WHERE LI10_CODART_MG66 = '" & dtgAggAcquisto.Rows(i).Cells(0).FormattedValue & "' AND LI10_FLGVENDACQ = '1' AND LI10_NUMLIST = '1'"
            con.Open()
            cmd.ExecuteNonQuery()
            con.Close()

        Next

        MessageBox.Show("Aggiornamento Completato.", "Pricing - Costing Management")

    End Sub
End Class
Nel momento in cui vado ad eseguire il comando di aggiornamento, mi riporta sempre l'errore che vi allego.

Penso che l'errore sia dovuto alla prima colonna del codice articolo, dove nella tabella sql è settato come char(25) e non posso cambiarlo in quanto si tratta di una tabella predefinita del nostro ERP.

Ho provato anche a convertire il valore di partenza ma senza successo, probabilmente sto sbagliando qualcosa.

Grazie mille in anticipo a tutti per l'aiuto
Allegati:
31216_5f0fe63bb3bc3c36e1d143125d46e3f4.jpg
31216_5f0fe63bb3bc3c36e1d143125d46e3f4.jpg

22 Risposte

  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    Il campo

    LI10_PREZZO = '" &

    è numerico? Perché usi l'apice?
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    oregon ha scritto:


    Il campo

    LI10_PREZZO = '" &

    è numerico? Perché usi l'apice?
    Il campo è decimal(17, 6) e l'apice giustamente non dovrebbe servire perchè potrebbe causare conflitti...
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    Gli apici creano sicuramente errori. Li hai tolti?
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    Si li ho rimossi ma ora mi da questo errore che non capisco......
    Allegati:
    31216_3f1506dc623d5c1ec1f8c7608c388636.jpg
    31216_3f1506dc623d5c1ec1f8c7608c388636.jpg
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    DiegoLuppi1993 ha scritto:


    Si li ho rimossi ma ora mi da questo errore che non capisco......
    Devi anche controllare (in modo abituale) che lo statement SQL che vai a comporre dinamicamente come stringa sia valido.

    Inoltre, laddove devi inserire valori presi dall'esterno, usa i parametri senza concatenare direttamente i valori alla stringa.

    Ciao!
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    DiegoLuppi1993 ha scritto:


    Si li ho rimossi ma ora mi da questo errore che non capisco......
    A parte il consiglio dei parametri di Alka, hai letto che è un errore di sintassi? Mi pare che il messaggio sia chiaro. Io vedo

    LI10_FLGVENDACQ = '1' AND LI10_NUMLIST = '1'

    in cui esistono ancora apici per valori numerici .... Insomma, correggi la query e poi la esegui. In ogni caso, se hai errori, visualizza in debug il contenuto di CommandText e postalo così come lo vedi
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    Concordo che dovresti usare i parametri oltre che per pulizia ed ordine ma anche per difenderti da un eventuale sql injection https://jonathancrozier.com/blog/preventing-sql-injection-in-c-sharp-applications
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    Buongiorno a tutti

    innanzitutto vi ringrazio per i consigli che mi avete dato.
    Probabilmente sto commettendo qualche errore banale, ma la query così come scritta se la eseguo direttamente su sql server non da nessun problema...inoltre il debug quando eseguo il controllo sul commandtext non da nessun errore...il formato della cella risulta essere double, ma anche se lo converto in decimal come il campo predefinito della tabella SQL non funziona...
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    Mostra nel forum la query completa così come è all'interno della stringa poco prima di essere eseguita.

    E ti rinnovo l'invito ad usare i parametri
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    Modificherò la query secondo i vostri suggerimenti grazie, ma prima volevo capire dove sto sbagliando anche per mia informazione...la prima riga verrebbe eseguita così...
    Allegati:
    31216_1c5cd9279fd3f03dc9ca08e277d79d9f.jpg
    31216_1c5cd9279fd3f03dc9ca08e277d79d9f.jpg
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    DiegoLuppi1993 ha scritto:


    Modificherò la query secondo i vostri suggerimenti grazie, ma prima volevo capire dove sto sbagliando anche per mia informazione...la prima riga verrebbe eseguita così...
    Perché fare uno screenshot di una stringa quando si può prendere quella stringa e copiarla/incollarla sul forum?
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    A parte il fatto che non si vede molto (incolla qui la stringa ... copia-incolla).

    1) indica il tipo dei campi usati nella query
    2) mi sono perso... adesso quale messaggio f'errore hai adesso?
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    oregon ha scritto:


    A parte il fatto che non si vede molto (incolla qui la stringa ... copia-incolla).

    1) indica il tipo dei campi usati nella query
    2) mi sono perso... adesso quale messaggio f'errore hai adesso?
    Allora la stringa che viene eseguita è la seguente (prima riga della tabella che carico):
    cmd.CommandText "UPDATE LI10_LISTARTIC SET LI10_PREZZO = 0,4 WHERE LI10_CODART_MG66 = 58 AND LI10_FLGVENDACQ = 1 AND LI10_NUMLIST = 1" String

    I campi SQL utilizzati nella tabella sono: LI10_CODART_MG66 (char 25) ed LI10_PREZZO (decimal 17,6), mentre il campo nel datagridview è double, quello da aggiornare
  • Re: PROBLEMA CONVERSIONE DA VARCHAR A NUMERIC

    Allora in 58 mancano gli apici. Deve essere

    '58'

    Non hai detto nulla sul tipo di LI10_FLGVENDACQ e LI10_NUMLIST

    Non hai risposto alla domanda 2)
Devi accedere o registrarti per scrivere nel forum
22 risposte