Visualizzazione dei risultati da 1 a 9 su 9

Discussione: eccezione di cast

  1. #1

    eccezione di cast

    Salve, io ho la necessità di mettere i risultati di una query select in un array. Siccome all'array devo assegnare una dimensione, inizialmente nn lo posso fare perchè non conosco quanti sono i record che mi estrare la select. Allora io mi conto il numero di record estratti e do quel numero come dimensione del mio array. Faccio così:

    string SQL = "select COUNT(*) from commessa where settore=?; select * from commessa where settore=?";
    //Response.Write(SQL);


    MySqlCommand cmd = new MySqlCommand(SQL, connection);
    cmd.Parameters.Add("?",id_settore);
    int records = (int)cmd.ExecuteScalar();
    string[] denominazione = new string[records];
    string[] descrizione = new string[records];
    MySqlDataReader dr = cmd.ExecuteReader();

    if (dr.HasRows)
    {
    int m = -1;
    while (dr.Read())
    {
    denominazione[++m] = dr["denominazione"].ToString();
    descrizione[m] = dr["descrizione"].ToString();

    }

    Quando lo avvio mi da la seguente eccezione:

    Cast specificato non valido

    sulla riga:

    int records = (int)cmd.ExecuteScalar();

    Come posso risolvere?

  2. #2
    x favore aiutatemi.................sto impazzendo...

  3. #3
    Non vorrei dire una castroneria, visto che è parecchio tardi... ma mi sa che un
    int records = (int)(cmd.ExecuteScalar()); ti potrebbe risolvere i problemi.

    Marco
    Marco Tibaldeschi
    www.dontbenegative.it

  4. #4

    Re: eccezione di cast

    non dovresti usare in quella maniera il command. In pratica esegui due volte la stessa query. ExecuteScalar torna la prima colonna della prima riga. Quindi se ti da errore di cast può darsi che non sia un intero. Ad ogni modo, perchè crei un array per contenere i dati? Non ti sarebbe più comodo e meno rischioso mettere tutto dentro una datatable se hai bisogno di un contenitore di dati scollegato dal db?
    es.
    DataTable dt = new DataTable();
    dt.Load(quicimettiiltuodatareader);
    Saluti a tutti
    Riccardo

  5. #5
    Quoto Riccardone, sicuramente se ottieni una sorgente disconnessa te la gestisci meglio e più efficacemente.
    Marco Tibaldeschi
    www.dontbenegative.it

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    ciao, prova a fare cosi:

    object obj = cmd.executeScalar();
    Response.Write(obj.GetType());

    in modo da capire che tipo è!
    cmq molto bella l'idea della doppia query, sii pero' sicura che MySQL la supporti!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  7. #7
    Originariamente inviato da stefanomnn
    cmq molto bella l'idea della doppia query, sii pero' sicura che MySQL la supporti!
    fammi capire: trovi molto bello ripetere la stessa query due volte una delle quali è solo per vedere quanti records ci sono?
    Saluti a tutti
    Riccardo

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    in molti contesti ha senso, in particolare quando devi fare query paginate!
    fare 2 query una dietro l'altra, evita un round-trip verso il db!

    poi se ha senso fare sempre le 2 query o no... dipende dall' applicazione!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  9. #9
    Originariamente inviato da stefanomnn
    fare 2 query una dietro l'altra, evita un round-trip verso il db!
    non mi risulta che eviti roundtrip. Finita una query ne fai un'altra e quindi fai di nuovo avanti e indietro dal db. Poi, se nel db i dati sono già in cache e quindi le letture dal disco sono limitate è un altro discorso ma comunque il round trip c'e'.
    Quindi, se proprio devi sapere quanti record ci sono applicando un certo filtro per poi eseguire lo stesso filtro, prima esegui una query "SELECT COUNT(*) FROM ... WHERE" con la funzione ExecuteScalar e poi fai la query che invece restituisce i records.
    In ogni caso, l'approccio seguito è sbagliato. Non potendo sapere in anticipo il numero di elementi di un array, molto meglio usare una datatable oppure un arraylist che a differenza di un array è una collection si espande dinamicamente.
    Saluti a tutti
    Riccardo

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.