Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    573

    sql server e tipi di variabili

    WOW apro il forum e... ha il vestito nuovo!!!


    Cmq, buongiorno a tutti!

    Problema:
    sto leggendo dei dati con un codebehind da un datagrid (evento ItemCommand) e lavoro con db sql.

    Avevo scritto:
    Dim TempId As Integer
    TempId = CType(e.Item.FindControl("lbId"), Label).Text
    Dim TempQta As Integer
    TempQta = CType(e.Item.FindControl("tbQta"), TextBox).Text
    Dim TempPrezzo As Decimal
    TempPrezzo = CType(e.Item.FindControl("lbPrezzo"), Label).Text

    ma sbagliado in quanto mi dice:
    System.FormatException: Input string was not in a correct format.


    Con questi dati poi faccio una insert in campi intero, intero e decimale... come avrei dovuto fare?

    grazie
    Elisa

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    Quando converti da un tipo stringa a un numerico assicurati prima che non sia Nothing o String.Empty, altrimenti dà errore.

    Es.
    codice:
    If Not StringTextBox.Text Is Nothing then
      MyValueInteger = Convert.ToInt32(StringTextBox.Text)
    End if
    Per i numeri con virgola, inoltre, fai attenzione a come interpreti i simboli che separano migliaia e decimali.

    Se ad esempio la tua textbox considera il punto come separatore delle migliaia e la virgola come separatore decimale, allora usa l'oggetto NumberFormatInfo.

    Es.
    codice:
    Dim NFI As New System.Globalization.NumberFormatInfo
    Dim NFI As New System.Globalization.NumberFormatInfo
    NFI.NumberDecimalSeparator = ","
    NFI.NumberGroupSeparator = "."
    If Not MyText.Text Is Nothing Then
      MyDouble=Convert.ToDouble(MyText.Text, NFI)
    End If
    ciao, javalon

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    573
    Ciao... sto provando a mettere in pratica i tuoi suggerimenti, mi da quest'errore:
    Name 'Convert' is not declared

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    fa parte del namespace System ed espone metodi shared:
    System.Convert.ToDouble
    System.Convert.ToInt16
    System.Convert.ToInt32
    ecc.

    ciao, javalon

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    573
    continua adare lo stesso errore... anche importando lo spazio dei nomi

    perdonami l'ignoranza ma ti posso chiedere un esempio su questi due stringhe che utilizzo?
    CType(e.Item.FindControl("lbId"), Label).Text
    (che è intero) e
    CType(e.Item.FindControl("lbPrezzo"), Label).Text
    che è decimale

    facendo la stessa cosa dentro access non ho avuto tutti questi problemi che ho con il db sql...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    Originariamente inviato da elisa_rm74
    continua adare lo stesso errore... anche importando lo spazio dei nomi
    Non capisco come mai... :master:

    In alternativa puoi provare ad usare i metodi:
    Integer.Parse(stringa)
    Double.Parse(stringa) o
    Double.Parse(stringa, IformatProvider) -->col NumberFormatInfo, te lo consiglio

    per convertire le stringhe in numero.

    perdonami l'ignoranza ma ti posso chiedere un esempio su questi due stringhe che utilizzo?
    CType(e.Item.FindControl("lbId"), Label).Text
    (che è intero) e
    CType(e.Item.FindControl("lbPrezzo"), Label).Text
    che è decimale

    facendo la stessa cosa dentro access non ho avuto tutti questi problemi che ho con il db sql...
    Una cosa: usa DirectCast invece di CType, quest'ultimo lo si usa per i tipi primitivi, DirectClass per i tipi complessi.

    Un consiglio: per fare l'aggiornamento sul db utilizza gli SqlParameter.
    Es.
    codice:
    Dim cmd as SqlClient.SQLCommand(<stringa sql>)
    cmd.Parameters.Add("@Prezzo", Data.SqlDbType.Decimal ) 'consiglio: specifica il tipo!
    Dim TextPrezzo As String=DirectCast(e.Item.FindControl("lbPrezzo"), Label).Text
    if TextPrezzo = String.Empty Then
      cmd.Parameters("@Prezzo").Value=DBNull.Value
    Else
      cmd.Parameters("@Prezzo").Value=Double.Parse(MyText, NIF)
      'NIF è il NumberFormatInfo di prima...
    End if
    
    'ecc....
    ciao, javalon

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    573
    grazie mille, gentilissimo.

    Ora ci provo, speriamo bene...

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    una piccola postilla:
    se il tuo campo è di tipo float usa:
    Double.Parse
    e
    Data.SqlDBTypes.Float

    se invece è "decimal" usa:
    Decimal.Parse
    e
    Data.SqlDBTypes.Decimal


    nell'esempio che ti ho riportato ho mischiato un po' le due cose....
    ciao, javalon

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.