• User

    Sommare valori da tabelle di database MySQL differenti in ASP.NET - C#

    Salve, dovrei sommare dei valori reperiti ognuno da una tabella differente. Ogni valore viene selezionato da una DropDown differente.
    A parer mio il codice risulta corretto, probabilmente è errata l'impostazione.

    Posto il codice e spiego meglio:

    
    protected void Preventivo_check_Click(object sender, EventArgs e)
            {
                //Variabili Dropdown
                int selectedIndex_00 = Gr_Carta.SelectedIndex;
                int selectedIndex_01 = Formato.SelectedIndex;
                int selectedIndex_02 = Quantità.SelectedIndex;
                int selectedIndex_03 = Applicazione.SelectedIndex;
                int selectedIndex_04 = Caldo.SelectedIndex;
                int selectedIndex_05 = Colori_Stampa.SelectedIndex;
                int selectedIndex_06 = Finiture.SelectedIndex;
                int selectedIndex_07 = F_P.SelectedIndex;
                int selectedIndex_08 = Manico.SelectedIndex;
                int selectedIndex_09 = Plastificazione.SelectedIndex;
                int selectedIndex_10 = Rinforzo_Fondo.SelectedIndex;
                int selectedIndex_11 = Rilievo_Stampa.SelectedIndex;
    
    
    
    
                //Variabili valori
                float grCarta = 0;
                float applicazione = 0;
                float caldo = 0;
                float coloriStampa = 0;
                float finiture = 0;
                float fP = 0;
                float manico = 0;
                float plastificazione = 0;
                float rinforzoFondo = 0;
                float rilievoStampa = 0;
    
    
                //Grammi Carta 150
                string mysqlConnectionString_150 = "server = localhost; user id = treseurusu; database = preventivatore; password = 2ahqBEx5Uy29jeBW";
                using (MySqlConnection connection = new MySqlConnection(mysqlConnectionString_150))
                {
                    connection.Open();
    
    
                    string mySql = "SELECT * FROM prezzi_grcarta_150";
    
    
                    MySqlCommand cb_gr_150 = new MySqlCommand(mySql, connection);
                    MySqlDataReader reader = cb_gr_150.ExecuteReader();
    
    
                    //1
                    if (reader.Read() && selectedIndex_00 == 1 && selectedIndex_01 == 1 && selectedIndex_02 == 1)
                    {
                        grCarta = (float)reader["valore_01"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //2
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 1 && selectedIndex_02 == 2)
                    {
                        grCarta = (float)reader["valore_02"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //3
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 1 && selectedIndex_02 == 3)
                    {
                        grCarta = (float)reader["valore_03"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //4
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 2 && selectedIndex_02 == 1)
                    {
                        grCarta = (float)reader["valore_04"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //5
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 2 && selectedIndex_02 == 2)
                    {
                        grCarta = (float)reader["valore_05"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //6
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 2 && selectedIndex_02 == 3)
                    {
                        grCarta = (float)reader["valore_06"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //7
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 3 && selectedIndex_02 == 1)
                    {
                        grCarta = (float)reader["valore_07"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //8
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 3 && selectedIndex_02 == 2)
                    {
                        grCarta = (float)reader["valore_08"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //9
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 3 && selectedIndex_02 == 3)
                    {
                        grCarta = (float)reader["valore_09"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //10
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 4 && selectedIndex_02 == 1)
                    {
                        grCarta = (float)reader["valore_10"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //11
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 4 && selectedIndex_02 == 2)
                    {
                        grCarta = (float)reader["valore_11"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //12
                    else if (selectedIndex_00 == 1 && selectedIndex_01 == 4 && selectedIndex_02 == 3)
                    {
                        grCarta = (float)reader["valore_12"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                }
    
    
                //Rinforzo fondo
                string mysqlConnectionString_RinforzoFondo = "server = localhost; user id = treseurusu; database = preventivatore; password = 2ahqBEx5Uy29jeBW";
                using (MySqlConnection connection = new MySqlConnection(mysqlConnectionString_RinforzoFondo))
                {
                    connection.Open();
    
    
                    string mySql = "SELECT * FROM prezzi_r_fondo";
    
    
                    MySqlCommand cb_r_fondo = new MySqlCommand(mySql, connection);
                    MySqlDataReader reader = cb_r_fondo.ExecuteReader();
    
    
                    //1
                    if (reader.Read() && selectedIndex_10 == 1 && selectedIndex_01 == 1 && selectedIndex_02 == 1)
                    {
                        grCarta = (float)reader["valore_01"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //2
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 1 && selectedIndex_02 == 2)
                    {
                        grCarta = (float)reader["valore_02"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //3
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 1 && selectedIndex_02 == 3)
                    {
                        grCarta = (float)reader["valore_03"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //4
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 2 && selectedIndex_02 == 1)
                    {
                        grCarta = (float)reader["valore_04"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //5
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 2 && selectedIndex_02 == 2)
                    {
                        grCarta = (float)reader["valore_05"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //6
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 2 && selectedIndex_02 == 3)
                    {
                        grCarta = (float)reader["valore_06"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //7
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 3 && selectedIndex_02 == 1)
                    {
                        grCarta = (float)reader["valore_07"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //8
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 3 && selectedIndex_02 == 2)
                    {
                        grCarta = (float)reader["valore_08"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //9
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 3 && selectedIndex_02 == 3)
                    {
                        grCarta = (float)reader["valore_09"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //10
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 4 && selectedIndex_02 == 1)
                    {
                        grCarta = (float)reader["valore_10"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //11
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 4 && selectedIndex_02 == 2)
                    {
                        grCarta = (float)reader["valore_11"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //12
                    else if (selectedIndex_10 == 1 && selectedIndex_01 == 4 && selectedIndex_02 == 3)
                    {
                        grCarta = (float)reader["valore_12"];
    
    
                        reader.Close();
                        connection.Close();
                    }
                }
    
    
                //Risultato
                float result = grCarta + applicazione + caldo + coloriStampa + finiture + fP + manico + plastificazione + rinforzoFondo + rilievoStampa;
                Preventivo_value.Text = result.ToString();
            }
    
    

    In parole povere: se io seleziono un index nella DropDown grCarta mi restituisce il valore corretto, se io seleziono un index nella DropDown rinforzoFondo mi restituisce il valore corretto, se io seleziono entrambi anzi che restituirmi la somma mi restituisce il valore di rinforzoFondo.

    Cosa c'è di errato?


  • Moderatore

    Ciao trese, ad un primo sguardo veloce mi sembra che il problema stia nel fatto che la variabile grCarta sia sempre la stessa sia per "Grammi Carta 150" che per "Rinforzo Fondo".
    Quindi nel secondo passaggio la variabile viene reimpostata con il valore attribuito a "Rinforzo Fondo"...

    Sempre che abbia capito il giro 😉


  • User

    Sarò sincero: sono neodiplomato e durante i compiti in classe delle materie tecniche (costruzioni, topografia, ecc.) facevo il procedimento corretto ma c'era sempre qualche errore di distrazione come in questo caso... Devo perdere questo vizio :tongueout:
    Poi, nell' ambito della programmazione, quando qualcosa non va si cerca sempre l'errore più complesso mentre invece è una variabile posta con copia e in colla per questioni di ripetizione di codice e non modificata :bigsmile:

    Ti ringrazio per avermelo fatto notare, cercherò, prima di postare, di dare uno sguardo più attento al codice. Grazie ancora.


  • Moderatore

    Ciao Trese, in realtà la cosa che salta più all'occhio, dal punto di vista della programmazione è, a mio modo di vedere, la scelta architetturale del DataBase...

    In questo momento hai nel DataBase delle tabelle (io ne ho conosciute 2 dal tuo post, ma immagino ce ne siano delle altre) prezzi_grcarta_150 e **prezzi_r_fondo **che sono impostate "orizzontalmente" con una serie di valori per i quali non hai alcun riferimento per le scelte effettuate dall'utente.

    Personalmente strutturerei le tabelle in un altro modo:

    Faccio un esempio:

    prezzi_grcarta_150

    ID|grCarta|Formato|Quantita|Valore|

    1 |1 |1 |1 |0.54 |

    2 |1 |1 |2 |0.55 |

    3 |1 |1 |3 |0.48 |

    4 |1 |2 |1 |0.65 |

    5 |1 |2 |2 |0.66 |

    6 |1 |2 |3 |0.58 |

    A questo punto nel codice ti sarebbe sufficiente fare una query del tipo:

    string mySql = "SELECT * FROM prezzi_grcarta_150 WHERE grCarta = 1 AND Formato = " + selectedIndex_01 + " AND Quantita = " + selectedIndex_02;
    

    In questo modo potresti inoltre preparare un interfaccia per configurare i prezzi qualora questi dovessero variare in funzione di nuove combinazioni di Formati e Quantità.


  • User

    Effettivamente si, hai ragione, l'architettura del database da me costruita è dovuta alla mia poca conoscenza in materia. Quando ho iniziato questo progetto non avevo mai lavorato ne con il MySQL ne con lì' ASP.NET quindi ho avuto un po di difficolta ad organizzare il lavoro prima di metterlo in pratica.

    Comunque ti ringrazio per il consiglio, lo terrò a mente per futuri progetti 😉


  • Moderatore

    You're welcome