홈>
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 날짜 매개 변수를 c#에서 SQL로 전달하면 Count 열에 0이있는 데이터가 반환됩니다.
- c# : Windows 사용자 자격 증명에 SQL Server 테이블에 대한 액세스 권한이 있는지 확인
- c# : 내가 어디가 잘못되었는지 모르기 때문에 누구 든지이 code로 나를 도울 수 있습니까?
- c# : 웹 응용 프로그램에서 HostGator (Shared Hosting) SQL DB에 연결할 수 없습니다.
- c# : SQL 쿼리를 Linq로 변환 (람다 메서드)
- c# : 오류 : 26-지정된 서버 /인스턴스 찾기 오류, 공급자 : SQL 네트워크 인터페이스
- c# : sqlparameter를 IN ()에 전달하는 방법은 무엇입니까? [복제]
- c# : 그것은 무엇 일 수 있습니까? SQL (mssql)을 업데이트하고 code를 hvae 업데이트했지만 여전히 두 가지가 오래된 데이터를 보여줍니다?
- c#을 사용하여 SQL 쿼리에서 레code를 검색 할 수 없습니다.
- c# : 저장 프로 시저를 구문 분석하는 방법은 무엇입니까?
이 접근 방식은 작동하지 않습니다. 독자는 업데이트로 수행 된 업데이트를 볼 수 없습니다.
쉬운 접근 방식은 반복적 인 업데이트를 수행하는 것입니다. 말하십시오,
모든 수준에서 null로 시작
"parent_id = parent_id_ref"인 경우 대량 업데이트 수준은 0으로
수준이 이미 설정된 부모의 자녀를 대량 업데이트
한 번의 반복으로 영향을받는 행 수가 0이 될 때까지 이전 명령문을 반복합니다.
이 모든 것은 단일 SQL 명령으로 수행 될 수 있으며, 마지막 단계에서 루프는 명령문 후 @@ rowcount 값을 확인합니다