ASP에서 SQL Server의 저장 프로시저를 호출할 때 Adodb.Command 개체를 사용하는 경우 일반적으로 다음 코드를 사용합니다.
Dim cmd, rs
set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = 연결
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "테스트Proc"
cmd.Parameters.Append cmd.CreateParameter("@a" , adInteger, adParamInput, 4, 1)
cmd.Parameters.Append cmd.CreateParameter("@b" , adVarChar, adParamInput, 50, 'b')
...
set rs = cmd.Execute
오늘 프로그램을 디버깅할 때 ASP 페이지에 특정 매개 변수에 값이 할당되지 않았다고 표시되어 있지만 실제로는 값을 할당하지 않은 다른 매개 변수인 것을 발견했습니다. 그래서 SQL Server의 프로파일러를 열고 프로그램을 실행하여 ASP에서 Sql Server로 보낸 SQL 문이 실제로 다음과 같은 형식인 것을 캡처했습니다.execute
TestProc 1, 'b', ....
이제 그 이유가 분명해졌습니다. 그러나 ADO 엔진은 저장 프로시저에 대한 호출을 완전한 구문으로 변환하지 않고 위의 약어 방식을 사용한다. 이와 같이 중간에 있는 매개변수가 유실되면 다른 매개변수가 유실된 것으로 오인될 수 있다. 정렬 불량.
그런 다음 Command 개체의 속성을 확인하고 다음 문장을 추가했습니다.
cmd.NamedParameters = true
. 이는 명시적으로 명명된 변수 형식을 사용하도록 지정했음을 의미합니다. 그런 다음 프로그램을 실행하고 이벤트 프로파일러에 캡처된 명령문이 이제:
exec TestProc @a = 1, @b = 'b', ...
오류 매개변수도 정확합니다.
이제 모든 것이 괜찮아요