>

TreeView 유형 시나리오에서 사용되는 일부 데이터가 포함 된 SQL Express 테이블이 있습니다.

부모-자녀 관계가 있지만 모두 하나의 테이블에 있습니다.

내 목표는 들여 쓰기 레벨 값을 설정하는 것이며 내 생각은 데이터를 선택하고 독자를 사용하여 첫 번째 레코드부터 시작하는 것이 었습니다. 부모가 없으므로 레벨이 0으로 유지됩니다. 레코드에 부모가 있으면 부모의 들여 쓰기 값을 확인한 다음 1을 추가해야합니다.

내 문제는 모든 수준이 0으로 시작한다는 것입니다. 코드를 실행할 때 들여 쓰기 수준을 두 번째 레코드에서 1로 설정하지만 3을 기록하면 3의 부모 수준이 표시됩니다. 여전히 0입니다. 업데이트했지만 테이블을 볼 때 1로 설정되어 있습니다. 선택 항목이 이미 리더에 데이터를 저장 한 것 같습니다.

테이블 구조 :

using (SqlConnection connection = new SqlConnection("Data Source=" + servername + "; MultipleActiveResultSets = true;Initial Catalog=" + database + "; Integrated Security=SSPI"))
{
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM relationship", connection))
    {
        connection.Open();
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            // Check is the reader has any rows at all before starting to read.
            if (reader.HasRows)
            {
                // Read advances to the next row.
                while (reader.Read())
                {
                    int sid = reader.GetInt32(1);
                    //GET THE CURRENT LEVEL OF THE RECORD
                    int slevel = reader.GetInt32(4); /* THIS SECTION IS NOT SELECTING THE CURRENT DATA THAT WAS UPDATED IN MY UPDATE BELOW*/
                    //ADD TO CURRENT LEVEL
                    int newslevel = slevel + 1;
                    MessageBox.Show("MY ID IS " + sid + " MY LEVEL IS " + slevel);
                    using (SqlCommand upd = new SqlCommand("UPDATE relationship SET level=@newlevel WHERE parent_id_ref=@sid", connection))
                    {
                        upd.Parameters.AddWithValue("@sid", sid);
                        upd.Parameters.AddWithValue("@newlevel", newslevel);
                        int rows = upd.ExecuteNonQuery();
                    }
                }
            }
        }
        connection.Close();
    }
}


  • 답변 # 1

    이 접근 방식은 작동하지 않습니다. 독자는 업데이트로 수행 된 업데이트를 볼 수 없습니다.

    쉬운 접근 방식은 반복적 인 업데이트를 수행하는 것입니다. 말하십시오,

    모든 수준에서 null로 시작

    "parent_id = parent_id_ref"인 경우 대량 업데이트 수준은 0으로

    update relationship set level = 0 where parent_id = parent_id_ref
    
    

    수준이 이미 설정된 부모의 자녀를 대량 업데이트

    update relationship set level = parent.level + 1
    from relationship child inner join relationship parent on parent.parent_id = child.parent_id_ref
    where parent.level is not null and child.level = 0
    
    

    한 번의 반복으로 영향을받는 행 수가 0이 될 때까지 이전 명령문을 반복합니다.

    이 모든 것은 단일 SQL 명령으로 수행 될 수 있으며, 마지막 단계에서 루프는 명령문 후 @@ rowcount 값을 확인합니다

  • 이전 php - 바이트 배열을 UINT64로 변환
  • 다음 php curl - 본문을 이진 데이터로 설정하는 방법?