Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di lila89
    Registrato dal
    Oct 2007
    Messaggi
    211

    [asp.net c#] errore overflow

    ciao,
    come da titolo ho un problema riguardante la seguentre funzione che va in "blocco" causa overflow... qlk idea?
    codice:
        void ricorsiva(string userP, string userA)
        {
            DataSet DSetR = new DataSet();
            DataSet DSetR2 = new DataSet();
            string Cnnstr = System.Configuration.ConfigurationSettings.AppSettings["CN1"].ToString();
            bool ret2 = false;
            ret2 = clsFunctions.LoadDataSetFromSqlStatement(Cnnstr, "SELECT kiave1 FROM amicizie WHERE (amicizie.kiave2 = '" + userP + "')", "PROVA2", ref DSetR, true);
    
            if (ret2 == true)
            {
                if (DSetR.Tables["PROVA2"].Rows.Count > 0)
                {
                    DSetR.Tables["PROVA2"].Rows[0]["kiave1"].ToString();
                    int num;
                    num = DSetR.Tables["PROVA2"].Rows.Count;
                    int i;
                    bool risultato;
                    risultato = false;
                    string a;
                 
                    for (i = 0; i < num; i++)
                    {
                        a = DSetR.Tables["PROVA2"].Rows[i]["kiave1"].ToString();
                        if (a == userA)
                        {
                            risultato = true;
                            break;
                        }
                        else
                        {
                            risultato = false;
                        }
    
                        if (risultato == true)
                        {
                            nessuna.Text = "percorso tra gli urenti selezionati trovato";
                        }
                        else
                        {
                            this.ricorsiva(a, userA);
                        }
                    }
                }
                else
                {
                    bool ret3 = false;
                    ret3 = clsFunctions.LoadDataSetFromSqlStatement(Cnnstr, "SELECT kiave2 FROM amicizie WHERE (amicizie.kiave1 = '" + userP + "')", "PROVA3", ref DSetR2, true);
                    if (ret3 == true)
                    {
                        if (DSetR2.Tables["PROVA3"].Rows.Count > 0)
                        {
                            int num2;
                            num2 = DSetR2.Tables["PROVA3"].Rows.Count;
                            int i;
                            bool risultato2;
                            risultato2 = false;
                            string b;
                            DSetR2.Tables["PROVA3"].Rows[0]["kiave2"].ToString();
                            num2 = DSetR2.Tables["PROVA3"].Rows.Count;
                            for (i = 0; i < num2; i++)
                            {
                                b = DSetR2.Tables["PROVA3"].Rows[i]["kiave2"].ToString();
                                if (b == userA)
                                {
                                    risultato2 = true;
                                    break;
                                }
                                else
                                {
                                    risultato2 = false;
                                }
    
                                if (risultato2 == true)
                                {
                                    nessuna.Text = "percorso tra gli urenti selezionati trovato";
                                }
                                else
                                {
                                    this.ricorsiva(b, userA);
                                }
                            }
                        }
                        else
                            {
                                nessuna.Text = "L'utente " + userP + " non ha ancora aggiunto nessun utente alla lista degli amici";
                            }
                    }
                }
    
            }
        }

  2. #2
    Utente di HTML.it L'avatar di lila89
    Registrato dal
    Oct 2007
    Messaggi
    211
    ho trovato l'errore.. ma non so come risolverlo... nella seconda funzione, se metto la ricorsione su se stessa smette di andare in overflow, ma ovviemente no nrestituisce il dato corretto.. se metto:

    codice:
    ......
    ......
                 if (risultato2 == true)
                                {
                                    nessuna.Text = "percorso tra gli urenti selezionati trovato";
                                }
                                else
                                {
                                    this.ricorsiva2(b, userA);
                                }
                            }
                        }
                        else
                            {
                                nessuna.Text = "L'utente " + userP + " non ha ancora aggiunto nessun utente alla lista degli amici";
                            }
                    }
                }

  3. #3
    Utente di HTML.it L'avatar di lila89
    Registrato dal
    Oct 2007
    Messaggi
    211
    ciao, ho fatto qualche cambiamento, dividendo il due la funzione... ma da sempre serrore di stack overflow, nessuno sa come risolvere\evitare il problema? e\o qlk suggerimento di come costruire una funzione che abbia lo stesso risultato?

    codice:
     void ricorsiva(string userP, string userA)
        {
            DataSet DSetR = new DataSet();
            string Cnnstr = System.Configuration.ConfigurationSettings.AppSettings["CN1"].ToString();
            bool ret2 = false;
            ret2 = clsFunctions.LoadDataSetFromSqlStatement(Cnnstr, "SELECT kiave1 FROM amicizie WHERE (amicizie.kiave2 = '" + userP + "')", "PROVA2", ref DSetR, true);
    
            if (ret2 == true)
            {
                if (DSetR.Tables["PROVA2"].Rows.Count > 0)
                {
                    DSetR.Tables["PROVA2"].Rows[0]["kiave1"].ToString();
                    int num;
                    num = DSetR.Tables["PROVA2"].Rows.Count;
                    int i;
                    bool risultato;
                    risultato = false;
                    string a;
    
                    for (i = 0; i < num; i++)
                    {
                        a = DSetR.Tables["PROVA2"].Rows[i]["kiave1"].ToString();
                        if (a == userA)
                        {
                            risultato = true;
                            break;
                        }
                        else
                        {
                            risultato = false;
                        }
    
                        if (risultato == true)
                        {
                            nessuna.Text = "percorso tra gli urenti selezionati trovato";
                        }
                        else
                        {
                            this.ricorsiva(a, userA);
                        }
                    }
                }
                else
                {
                    this.ricorsiva2(userP, userA);
                }
    
            }
        }
    
        void ricorsiva2(string P, string A)
        {
            DataSet DSetR2 = new DataSet();
            string Cnnstr = System.Configuration.ConfigurationSettings.AppSettings["CN1"].ToString();
            bool ret3 = false;
            ret3 = clsFunctions.LoadDataSetFromSqlStatement(Cnnstr, "SELECT kiave2 FROM amicizie WHERE (amicizie.kiave1 = '" + P + "')", "PROVA3", ref DSetR2, true);
            if (ret3 == true)
            {
                if (DSetR2.Tables["PROVA3"].Rows.Count > 0)
                {
                    int num2;
                    num2 = DSetR2.Tables["PROVA3"].Rows.Count;
                    int i;
                    bool risultato2;
                    risultato2 = false;
                    string b;
                    DSetR2.Tables["PROVA3"].Rows[0]["kiave2"].ToString();
                    num2 = DSetR2.Tables["PROVA3"].Rows.Count;
                    for (i = 0; i < num2; i++)
                    {
                        b = DSetR2.Tables["PROVA3"].Rows[i]["kiave2"].ToString();
                        if (b == A)
                        {
                            risultato2 = true;
                            break;
                        }
                        else
                        {
                            risultato2 = false;
                        }
    
                        if (risultato2 == true)
                        {
                            nessuna.Text = "percorso tra gli urenti selezionati trovato";
                        }
                        else
                        {
                            this.ricorsiva(b, A);
                        }
                    }
                }
                else
                {
                    nessuna.Text = "L'utente " + P + " non ha ancora aggiunto nessun utente alla lista degli amici";
                }
            }
        }
        }

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    probabilmente ci sono dei dati incrociati sul DB,

    tipo A e amico di B e B e' amico di A... prova a lavorare su una tabella parallela con pochi utenti
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.