집 >데이터 베이스 >MySQL 튜토리얼 >내 SQL 쿼리에서 '변수 이름이 이미 선언되었습니다' 오류가 발생하는 이유는 무엇입니까?
오류 메시지 "변수 이름 '@'이(가) 이미 선언되었습니다. 변수 이름 쿼리 일괄 처리 또는 저장 프로시저 내에서 고유해야 합니다."는 SQL 내의 변수 이름 지정이 충돌함을 나타냅니다. code.
제공된 코드 조각에서 "btn_lock2_Click" 이벤트 핸들러 내의 루프에서 동일한 변수 이름 "@LockState"를 여러 번 사용하려고 하면 문제가 발생합니다. SQL에는 혼동과 모호함을 방지하기 위해 쿼리 또는 저장 프로시저 내에서 고유한 변수 이름이 필요합니다.
해결 방법 중 하나 충돌은 각 루프 반복 전에 매개변수 컬렉션을 지우는 것입니다. 이렇게 하면 동일한 매개변수 이름이 컬렉션에 여러 번 추가되지 않습니다.
for (long counter = from; counter <= to; counter )
{
rwd.command.Parameters.Clear(); // Clear the parameters collection before adding new parameters string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'"; rwd.command.CommandText = upd; rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar)).Value = 1; rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar)).Value = txt_desc2.Text; ...
}
또는 루프 전에 매개변수를 정의한 다음 각 반복 내에서 해당 값을 업데이트할 수 있습니다. 이 접근 방식은 루프가 시작되기 전에 매개변수가 컬렉션 내에 존재하도록 보장하여 지울 필요가 없도록 합니다.
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));
for (long counter = from; counter <= to; counter )
{
string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'"; rwd.command.CommandText = upd; rwd.command.Parameters["@LockState"].Value = 1; rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text; ...
}
이러한 솔루션 중 하나를 사용하면 SQL 쿼리에 고유한 변수 이름이 있는지 확인하여 "이미 선언된" 오류를 방지할 수 있습니다. 오류가 발생했습니다.
위 내용은 내 SQL 쿼리에서 '변수 이름이 이미 선언되었습니다' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!