De Données SQL Hiérarchie

J'ai regardé à travers quelques SQL hiérarchie des tutoriels, mais aucun d'entre eux fait beaucoup de sens pour mon application. Peut-être que je suis juste de ne pas les comprendre correctement. Je suis en train d'écrire un C# ASP.NET application et je voudrais créer une arborescence de la hiérarchie à partir de données SQL.

C'est comment la hiérarchie de travail:

TABLE SQL 

ID | identificateur de Localisation | Nom 
_______| __________ |_____________ 
1331 | 1331 | Maison 
1321 | 1331 | Salle 
2141 | 1321 | Lit 
1251 | 2231 | salle de sport 

Si l'ID et le code d'Emplacement sont les mêmes, cela permettrait de déterminer la société Mère. Enfants que les Parents ont le même Emplacement ID en tant que Parent. Tout-petits-enfants de cet Enfant aurait un Emplacement ID égal à l'ID de l'Enfant, et ainsi de suite.

Pour l'exemple ci-dessus:

- Maison 
-- Salle 
--- Lit 

De l'aide ou de la direction de facile à suivre des tutoriels serait grandement apprécié.

EDIT:

Code que j'ai à ce jour, mais il n'obtient que le Parent et les Enfants, pas de petits-enfants. Je n'arrive pas à comprendre comment le faire de manière récursive obtenir tous les nœuds.

using System;
using System.Data;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
namespace TreeViewProject
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PopulateTree(SampleTreeView);
}
public void PopulateTree(Control ctl)
{
//Data Connection
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["AssetWhereConnectionString1"].ConnectionString);
connection.Open();
//SQL Commands
string getLocations = "SELECT ID, LocationID, Name FROM dbo.Locations";
SqlDataAdapter adapter = new SqlDataAdapter(getLocations, connection);
DataTable locations = new DataTable();
//Fill Data Table with SQL Locations Table
adapter.Fill(locations);
//Setup a row index
DataRow[] myRows;
myRows = locations.Select();
//Create an instance of the tree
TreeView t1 = new TreeView();
//Assign the tree to the control
t1 = (TreeView)ctl;
//Clear any exisiting nodes
t1.Nodes.Clear();
//BUILD THE TREE!
for (int p = 0; p < myRows.Length; p++)
{
//Get Parent Node
if ((Guid)myRows[p]["ID"] == (Guid)myRows[p]["LocationID"])
{
//Create Parent Node
TreeNode parentNode = new TreeNode();
parentNode.Text = (string)myRows[p]["Name"];
t1.Nodes.Add(parentNode);
//Get Child Node
for (int c = 0; c < myRows.Length; c++)
{
if ((Guid)myRows[p]["LocationID"] == (Guid)myRows[c]["LocationID"] 
&& (Guid)myRows[p]["LocationID"] != (Guid)myRows[c]["ID"] /* Exclude Parent */)
{
//Create Child Node
TreeNode childNode = new TreeNode();
childNode.Text = (string)myRows[c]["Name"];
parentNode.ChildNodes.Add(childNode);
}
}
}
}
//ALL DONE BUILDING!
//Close the Data Connection
connection.Close();
}
}
}

Ici est un snippit de la table SQL: les Lieux

ID LocationID Nom 
____________________________________ ____________________________________ ______________ 
DEAF3FFF-FD33-4ECF-910B-1B07DF192074 48700BC6-la d422-4B26-B123-31A7CB704B97 Drop F 
48700BC6-la d422-4B26-B123-31A7CB704B97 7EBDF61C-3425-46DB-A4D5-686E91FD0832 Olway 
06B49351-6D18-4595-8228-356253CF45FF 6E8C65AC-CB22-42DA-89EB-D81C5ED0BBD0 Drop E 5 
E98BC1F6-4BAE-4022-86A5-43BBEE2BA6CD DEAF3FFF-FD33-4ECF-910B-1B07DF192074 Drop F 6 
F6A2CF99-F708-4C61-8154-4C04A38ADDC6 7EBDF61C-3425-46DB-A4D5-686E91FD0832 Pree 
0EC89A67-D74A-4A3B-8E03-4E7AAAFEBE51 6E8C65AC-CB22-42DA-89EB-D81C5ED0BBD0 Chute de E 4 
35540B7A-62F9-487F-B65B-4EA5F42AD88A 48700BC6-la d422-4B26-B123-31A7CB704B97 Olway Ventilation 
5000AB9D-EB95-48E3-B5C0-547F5DA06FC6 6E8C65AC-CB22-42DA-89EB-D81C5ED0BBD0 1 
53CDD540-19BC-4BC2-8612 CONNECTEZ-5C0663B7FDA5 6E8C65AC-CB22-42DA-89EB-D81C5ED0BBD0 Drop E 3 
7EBDF61C-3425-46DB-A4D5-686E91FD0821 B46C7305-18B1-4499-9E1C-7B6FDE786CD6 TEST 1 
7EBDF61C-3425-46DB-A4D5-686E91FD0832 7EBDF61C-3425-46DB-A4D5-686E91FD0832 RÉSEAU 

Grâce.

  • Ces noms sont source de confusion. Je voudrais changer Location ID à Parent_ID.
  • Un pur SQL réponse peuvent avoir besoin de connaître la version de SQL que vous utilisez. Pouvez-vous indiquez la base de données que vous avez? SQL Server 2008, peut-être?
  • Malheureusement je ne peux pas changer les noms de beaucoup trop d'autres choses qui en dépendent. Je suis à l'aide de SQL Server 2008.
  • Vous utilisez les types de données HierarchyID?
InformationsquelleAutor Will | 2011-05-17