none
Errore "Valore troppo grande o troppo piccolo per un Int32 Source : mscorlib" facendo una select RRS feed

  • Domanda

  • Salve,

    Facendo questa select

    Select * from TABANDROMOD WHERE IDSINCRO BETWEEN 1907722 AND 1907821 ORDER BY IDSINCRO

    mi esce l'errore "Valore troppo grande o troppo piccolo per un Int32 Source : mscorlib"

    Il campo IDSINCRO è un INT32  IDENTITY

    Sto utilizzando Sql Server 2008 R2

    Grazie per l'aiuto

    Utilizzo Visual Studio 2017


    • Modificato AlbeCalle giovedì 20 settembre 2018 14:03
    mercoledì 19 settembre 2018 08:33

Tutte le risposte

  • I numeri che hai inserito vanno oltre il 65535 che è il massimo che un intero a 32 bit può ospitare.

    Presumo che il campo IDSincro sia un intero a 64 bit (Int in Sql Server) se è così prova questo

    string sql = "Select * from TABANDROMOD WHERE IDSINCRO BETWEEN @MinID AND @MaxID ORDER BY IDSINCRO";
    
    int minvalue = 1907722 ;
    int maxValue = 1907821 ;
    
    SqlCommand cmd = new SqlCommand();
    
    
    //Aggiungi la connection mi raccomando
    
    
    cmd.CommandText = sql;
    cmd.Parameters.AddWithValue( "@MinID", minValue);
    cmd.Parameters.AddWithValue( "@MaxID", maxValue);
    
    //apri la connection
    
    SqlDataReader reader = cmd.ExecuteReader();
    
    //adesso puoi leggere i dati e fare quel che vuoi.
    
    
    
    
    
    
    

    Saluti


    Sabrina C. - http://www.dotnetwork.it


    lunedì 24 settembre 2018 06:50
  • Chiedo scusa per la mia ignoranza.

    Ma un Int32 dovrebbe avere un campo compreso fra - 2.147.483.648 ÷ +2.147.483.647

    Oppure questo vale solo per il linguaggio vb e non per SQL?

    Queste due righe di codice girano

            Dim i As Int32 = 2147483647
            MessageBox.Show(i.ToString)

    queste mi danno errore

            Dim i As Int32 = 2147483648
            MessageBox.Show(i.ToString)

    e mi chiede un int64.

    Grazie

    Celestino

    martedì 25 settembre 2018 17:12
  • Hai ragione Celestino, l'Int32 correttamente assume I valori che tu hai indicato ed è esattamente il tipo di variabile che in C# corrisponde all' int che ti ho scritto nel codice.

    Il problema è diverso, nella query diretta che tu hai fatto, l'interprete di SQL Server probabilmente fa una conversione automatica usando un intero a 16 bit e per quel motivo ti da l'errore.

    Quello è il motivo per cui ti ho mostrato una query parametrica, perché I parametri passati saranno tipizzati (quindi Int32) ed il loro valore sarà accettabile.

    Se anche così continui ad ottenere lo stesso errore, il problema potrebbe essere diverso e probabilmente non riguarda I numeri interi della tua query, ma qualcos'altro che non va nel sistema.

    La sola domanda che mi sorge è: che tipo di dato è stato utilizzato per il campo IDSincro del tuo database? Potrebbe essere che tale campo non è un intero a 32 bit ma un intero a 16 bit?

    saluti


    Sabrina C. - http://www.dotnetwork.it

    mercoledì 26 settembre 2018 06:58
  •  Il campo IDSINCRO è un INT32  IDENTITY.

    Comunque secondo me il problema non è a livello SQL ma qualche libreria non allineata nel programma

    mercoledì 26 settembre 2018 08:03
  • In questo caso, verifica che tutte le librerie siano della stessa versione, controlla la versione del framework e come è installato il tutto.

    saluti


    Sabrina C. - http://www.dotnetwork.it

    giovedì 27 settembre 2018 09:56