RICORSIONE

giovedì 25 gennaio 2007 - 15.43

corkie 12 Profilo | Newbie

Buon giorno a tutti....avrei bisogno di un'aiuto riguardo la ricorsione...
io ho una tabella sql contenente IdUtenti e Idamici messi in questo modo


idutente idamico
1 2
3 4
6 8
2 3

il mio obbiettivo è quello dati due id inseriti in due textbox di sapere se gli id messi a confronto sono amici diretti (es. come 1 e 2 ) o se sono amici nn diretti come (es. 1 è amico di 2, 2 è amico di tre, risultato 1 è amico di 2 che è amico di 3)....come potrei grazie ad un metodo ricorsivo risalire a tutti i possibili collegamenti dati due id????
è un pò difficile ma sicuramente ci sarà qualcuno in grado di aiutarmi????? spero.....grazie anticipatamente...

Cteniza Profilo | Guru

Prova l'articolo sul mio blog.
Un esempio di utilizzo coordinato di ListView e TreeView e metodi ricorsivi con VB.NET
http://community.visual-basic.it/lucianob/articles/17106.aspx

corkie 12 Profilo | Newbie

il tuo esempio non mi è molto chiaro...(considera la mia ignoranza) ora mi spiego meglio....
ipotesi io metto in input 1 e 3
lui mi deve tornare con risultato
che 1 è amico di 2
2 è amico di tre
capisci che se fosse una tabella da 5000 elementi il risulato sarebbe tutte le coppie che mi portano dall'idutente all'idamico inseriti....
tipo
1 2
3 5
2 4
4 7
8 10
6 3
7 9
se metto in input 1 e 9 il risultato sarà
1 è amico di 2
2 è amico di 4
4 è amico di 7
7 è amico di 9

in somma tutto il percorso (sempre che esista) dall'idutente all'idamico immessi in input.......grazie!!!!

Cteniza Profilo | Guru

Purtroppo non ho tempo per sviluppare un esempio sui tuoi dati che puoi incorporare immediatamente nel tuo sviluppo, devi quindi sforzarti di capire il mio esempio ed applicarlo alla tua situazione.
Prova a ricostruire l'esempio e verifica "cosa fa" durante la funzione ricorsiva.

corkie 12 Profilo | Newbie

ora ci provo .....

corkie 12 Profilo | Newbie

il problema è che non capisco come integrare i miei dati che sono una tabella sql 2000
il tuo esempio li genera all'interno del codice io dovrei semplicemente passare la mia tabella al programma.....sono due colonne una idutente e idamico....se solo riuscissi ad utilizzare i miei dati con quelle strutture sarei l'uomo più felice dell mondo.... se prorio non riesci adesso non è un prolema cè tutto il week end , ma ti giuro che se riesco ad integrare i miei dati nel to esempio sono l'uomo più felice del mondo.....
La mia ignoranza nn mi permette di comprendere come dargli i miei dati da elaborare...

Cteniza Profilo | Guru

Ma la ricorsione la vuoi fare "lato sql" o lato client (tuo programma?).
Nel primo caso a mio aviso dovresti fare una stored procedure (e hai sbagliato forum).
Nel secondo caso il mio esempio funziona se hai pochi dati, se ne hai molti invece devi fare un ciclo che prenda i dati di ogni livello dal database.
Esempio in c# di popolamento di una treeview con metodo ricorsivo partendo da sql server:
private void PopolaTableDistinta(string padre, TreeNode nodoPadre)
{
SqlDataReader dr;
DataRow[] drw = dsTabe.Tables["DistintaBase"].Select("codpro = '" + padre + "'");
if (drw.Length == 0)
{
cmdSelect.Parameters["@Codpro"].Value = padre;
dr = cmdSelect.ExecuteReader();
object[] row = new object[dsTabe.Tables["DistintaBase"].Columns.Count];
while (dr.Read())
{
dr.GetValues(row);
dsTabe.Tables["DistintaBase"].Rows.Add(row);
}
dr.Close();
dsTabe.Tables["DistintaBase"].AcceptChanges();
drw = dsTabe.Tables["DistintaBase"].Select("codpro = '" + padre + "'");
}
foreach (DataRow row in drw)
{
string figlio = row["figlio"].ToString();
TreeNode nodo = new TreeNode();
nodo.Text = FormattaTextTreeNode(figlio) + row["Descrizione"].ToString();
nodo.Tag = figlio;
PopolaTableDistinta(figlio, nodo);
nodoPadre.Nodes.Add(nodo);

}
}
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5