2010-12-06 6 views
1

동일한 ID를 가진 항목이 이미 데이터베이스에 저장되어 있는지 확인하고 싶으면 해당 항목의 수량을 업데이트해야합니다. 사실 이 foreach 루프에서 각 항목의 수량을 업데이트합니다.Foreach 루프의 변수 사용

루프 외부에서 명령을 배치 할 때 'ItemID'를 사용할 수 없으므로 컨텍스트에 없는데 어쨌든이 문제를 해결할 수 있습니까?

당신에게

foreach (UserItem ItemID in (List<UserItem>)Session["UserSession"]) 
{ 
    ConclusionPage.InsertCommand = "IF EXISTS (SELECT ItemID FROM tblUserItems WHERE UserID='@CurrentUser' AND ItemID='@ItemID') UPDATE tblUserItems SET Quantity = Quantity+1 WHERE (UserID = '@CurrentUser') AND (ItemID = '@ItemID')"; 
    ConclusionPage.Insert();     
} 

답변

1

IF EXISTS 중복 감사합니다. UPDATE 문은 동일한 WHERE 절을 사용하기 때문에 동일한 조건과 일치하는 레코드에만 업데이트가 적용됩니다.

0

DB에 코드를 업데이트하는 코드가 실제로 있습니까? 이론적으로 IF EXISTS 부분은 그러한 것을 방지해야합니다.

SQL 명령을 이와 같이 변경하는 것이 좋습니다. 그렇다면 IF EXISTS 검사는 UPDATE를 사용하여 검사를 처리 할 수 ​​있으므로 불필요합니다.

UPDATE tblUserItems SET Quantity = Quantity + 1 WHERE (UserID = '@CurrentUser') AND AND (ItemID = '@ItemID') 

말했다 데, 당신이 여전히 잠재적으로 데이터베이스에 대한 불필요한 통화를 많이 게재 할 수있는 것 같은 DB가 수행 할 일이 많이있다 UserItems의 많은 경우. 아키텍처에 대한 내용을 알지 못하면 말할 수 없지만 대안을 살펴볼 가치가 있습니다.

0

결론 페이지로 이동했을 때 주 페이지와 결론 페이지 사이를 이동할 때 이것이 문제가되는지 확신 할 수 없습니다. 퀀 타이 사이트 자체를 업데이트합니다 : S 그래서 어쩌면 라이프 사이클 문제 일 수 있습니다. ? 나는를 Page_Load이 있고 난 후 Page_Init 여전히 같은 문제를 가지고 그것을 이동

편집 :

나는 '추가'를 클릭 시간의 양은 버튼이 양이, 예를 들어 씩 증가 수의 양이

각 페이지로드시 두 번씩 수량 증분을 두 번 클릭하십시오.

1

명령 (IF EXISTS ...)이 필요하지 않다고 생각합니다.

ConclusionPage.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CurrentUser", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "UserID", System.Data.DataRowVersion.Current, false, null, "", "", "")); 
    ConclusionPage.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ItemID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "ItemID", System.Data.DataRowVersion.Current, false, null, "", "", "")); 
    ConclusionPage.CommandType = System.Data.CommandType.Text; 
    ConclusionPage.UpdateCommand = "UPDATE tblUserItems SET Quantity = Quantity+1 WHERE (UserID = @CurrentUser) AND (ItemID = '@ItemID')"; 

    foreach (UserItem ItemID in (List<UserItem>)Session["UserSession"]) 
    { 
     ConclusionPage.Parameters[0].Value = CurrentUser; 
     ConclusionPage.Parameters[1].Value = ItemID; 
     ConclusionPage.ExecuteNonQuery(); 
    } 
:

이 코드를 사용해보십시오

관련 문제