2012-06-04 2 views
-2

Добрый день, приятели! В настоящее время я изучаю этот проект модели базы данных, называемый «Измененный предварительный трассировка дерева заказов» (MPTT). Увидев недостатки использования общих табличных выражений (CTE) из-за низкого качества работы, я нашел рекомендации по использованию MPTT. Но прежде чем я смогу использовать преимущество MPTT, мне нужно переконфигурировать мою таблицу базы данных, добавив значения «right» и «left». Для этого мне нужно создать программу, которая будет автоматизировать и обновлять значения каждого из данных в таблице. Моя проблема в том, что я не могу создать программу, которая будет автоматизировать значения узлов. Я пытаюсь преобразовать язык php в код C#, но я не мог этого сделать. Одна из моих слабостей в программировании - создание «рекурсивных» методов.Автоматизация обхода дерева в C#

Я использую эту ссылку в качестве ссылки. Hierarchical database model

И вот код, который я пытаюсь преобразовать в C#

<?php 
function rebuild_tree($parent, $left) { 
    // the right value of this node is the left value + 1 
    $right = $left+1; 

    // get all children of this node 
    $result = mysql_query('SELECT title FROM tree '. 
          'WHERE parent="'.$parent.'";'); 
    while ($row = mysql_fetch_array($result)) { 
     // recursive execution of this function for each 
     // child of this node 
     // $right is the current right value, which is 
     // incremented by the rebuild_tree function 
     $right = rebuild_tree($row['title'], $right); 
    } 

    // we've got the left value, and now that we've processed 
    // the children of this node we also know the right value 
    mysql_query('UPDATE tree SET lft='.$left.', rgt='. 
       $right.' WHERE title="'.$parent.'";'); 

    // return the right value of this node + 1 
    return $right+1; 
} 
?> 
+0

Какой ваш конкретная проблема? C# и PHP, как правило, очень похожи, и ваш код не является исключением. Преобразование этого кода должно быть довольно простым. – Enigmativity

ответ

0

Вот мой собственный код, пожалуйста, дайте мне знать, если есть гораздо лучшее решение

int right = 0; 

    public int rebuild_tree(int parent, int left) 
    { 
     // the right value of this node is the left value + 1 
     right = left + 1; 

     // get all children of this node 
     command = conn.CreateCommand(); 
     command.CommandText = "SELECT cat_id FROM tbl_RefDataCategory_mst WHERE [email protected]"; 
     command.Parameters.Add("parent", SqlDbType.Int).Value = parent; 

     using (SqlDataReader reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       int temp = Convert.ToInt32(reader["cat_id"]); 
       right = rebuild_tree(temp, right); 
      } 

      command = conn.CreateCommand(); 
      command.CommandText = "UPDATE tbl_RefDataCategory_mst SET [email protected], [email protected] WHERE [email protected]"; 
      command.Parameters.Add("l", SqlDbType.Int).Value = left; 
      command.Parameters.Add("r", SqlDbType.Int).Value = right; 
      command.Parameters.Add("p", SqlDbType.Int).Value = parent; 

      command.ExecuteNonQuery(); 
     } 

     return right + 1; 
    } 
Смежные вопросы