|
Да започнем с базата данни. Тя съдържа само една таблица на име "tblTree". Таблицата съдържа 3 колони:
1) IdClient - уникален номер, първичен ключ, идентифициращ даден клиент. 2) IdParent - указател, сочещ кой IdClient е родител на текущия клиент. Това е стандартният начин за обозначение на възли при дървовидно представяне на данни. 3) Other - тази колона съдържа незадължителни допълнителни данни за клиента и е сложена само заради примера. Все пак необходимо е да знаем малко данни за клиентите, с които работим! При тази организация на данните, със стандартне функционален език лесно можем да намерим родителя на даден възел, но по-трудно се намират наследниците му, защото нямаме пряк указател, сочещ наследниците. Въпреки това, използвайки синтаксиса на SQL, можем да сведем задачата за намиране на пълно поддърво спрямо начален възел до линеен лагоритъм!!! Нещо, което е невъзможно, ако използваме C++ например! Нека видим малко код: На глобално ниво създаваме обект за връзка към базата данни, както и 2 низови променливи, в които ще пазим низът за връзка и динамично генерираните SQL заявки: CODE
В събитието Page_Load имаме следния код: CODE
Намирането на клиентите не е интересно, това преставлява проста SQL заявка от рода на: CODE
Все пак нека проследим процеса, за да видим какво става: CODE
Коментарите говорят сами за себе си! Единственото, което трябва да се уточни е, че в реда, в който запълваме DataSet обекта с данни, ние "преименуваме" оригиналното име на таблицата и даваме новото име "tblFinalTree". Тази допълнителна гъвкавост е от значение, защото така се създава абстракция спрямо базата данни, която използваме.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









