Emad Ahmed Ответов: 0

Получить выбранный идентификатор узла из radtreeview (заполняется из SQL server)


У меня есть TreeView, который получает данные из таблицы Sql Server. Мой код успешно заполняет родительские и дочерние узлы. Я только хочу знать, как получить идентификатор узла в текстовом поле, когда я выбираю любой узел.

имя столбца идентификатора : cabinetID

Вот код, который я использую для заполнения TreeView:
public void loadContainerTree()
{
    repositoryid = Convert.ToInt32(txtRepositoryID.Text);

    conn.Open();
    SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM tblCabinets WHERE ParentID IS NULL AND repositoryID = '" + repositoryid + "'", conn);
    DataTable dt = new DataTable();
    adapter.Fill(dt);

    RadTreeNode parentNode;
    foreach (DataRow dr in dt.Rows)
    {
        parentNode = ContainersTree.Nodes.Add(dr["cabinetName"].ToString());
        PopulateTreeView(dr["cabinetID"].ToString(), parentNode);
    }

    ContainersTree.ExpandAll();
    conn.Close();
}

private void PopulateTreeView(string parentid, RadTreeNode parentNode)
{
    SqlDataAdapter adapterchild = new SqlDataAdapter("SELECT * FROM tblCabinets WHERE ParentID = '" + parentid + "' AND repositoryID = '" + repositoryid + "'", conn);
    DataTable dtchild = new DataTable();
    adapterchild.Fill(dtchild);

    foreach (DataRow dr in dtchild.Rows)
    {
        RadTreeNode childNode;

        if (parentNode == null)
        {
            childNode = ContainersTree.Nodes.Add(dr["cabinetName"].ToString());
        }
        else
        {
            childNode = parentNode.Nodes.Add(dr["cabinetName"].ToString());
            PopulateTreeView(dr["cabinetID"].ToString(), childNode);
        }
        getID = ContainersTree.Nodes.Add(dr["cabinetID"].ToString());
    }
}


Что я уже пробовал:

Кабинет.Text = ContainersTree.SelectedNode[0];

Richard Deeming

SqlDataAdapter adapterchild = new SqlDataAdapter("SELECT * FROM tblCabinets WHERE ParentID = '" + parentid + "' AND repositoryID = '" + repositoryid + "'", conn);

Не делай этого так!

Ваш код потенциально уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

SqlDataAdapter adapterchild = new SqlDataAdapter("SELECT * FROM tblCabinets WHERE ParentID = @ParentID AND repositoryID = @RepositoryID", conn);
adapterchild.SelectCommand.Parameters.AddWithValue("@ParentID", parentid);
adapterchild.SelectCommand.Parameters.AddWithValue("@RepositoryID", repositoryid);

Emad Ahmed

Спасибо, я всегда использую параметризованный запрос, как вы уже упоминали, но я просто взял этот код из учебника и намеревался изменить его позже.

Emad Ahmed

Но есть ли у вас ответ на мой первоначальный вопрос????

0 Ответов