작성
·
401
·
수정됨
0
DBBind 클래스에 _paramIndex와 _columnIndex 필드가 있는데 어떤 역할을 하고 있는지 모르겠습니다.
코드를 따라가 보면 ::SQLBindParameter 함수의 마지막 인자로 들어가게 되는데, 결국 모든 경우에 0을 전달하게 됩니다.
그렇다면 굳이 이럴 필요 없이 0을 전달하면 되는 것 아닌가요?
답변 2
0
당장 '값'을 전달하는 목적이 아니라, '공간'을 할당해서 전달한다고 생각하시면 됩니다.
기본적으로는 0 초기화 되어 있지만, 실제로 DBConnection 함수 내부에서
길이를 전달할 때 위와 같이 덮어 써서 사용하고 있습니다.
0
관련 함수의 MSDN 문서는 이미 살펴보았습니다.
제 질문에 오해의 소지가 있었네요, ::SQLBindParameter함수에 0이 전달되는 게 아닙니다. 그 전 단계인 DBConnection::BindParam 함수에 모든 경우 0이 전달됩니다.
DBBind 객체가 생성되면 paramIndex 필드가 0으로 초기화 됩니다. 이후 DBBind::BindParam 함수가 호출되면 DBBind는 DBConnection::BindParam 함수의 SQLLEN* index 인자에 _paramIndex를 넘겨줍니다.
void BindParam(int32 idx, const WCHAR* value)
{
dbConnection.BindParam(idx + 1, value, ¶mIndex[idx]);
_paramFlag |= (1LL << idx);
}
이렇게 말이죠.
그런데 이상한 점은, 이 _paramIndex 가 처음 0으로 초기화 된 이후 다른 값으로 바뀌질 않는다는 점입니다. 결국 모든 경우에 DBConnection::BindParam 함수에 0을 전달하게 됩니다. _columnIndex 필드에 대해서도 마찬가지 입니다.
이러면 _paramInndex의 존재의 이유가 무엇인가요?
그러니까 DBConnection의 DBBind 함수에서 _paramIndex의 값을 변경해 준 것이고,
이 변경된 _paramIndex의 값을 DBBind 클래스에서 활용할 가능성을 염두에 둔 것인가요?
아니면 어차피 SQLBindParameter 함수에 공간을 할당해서 넘겨주어야 하기 때문에 필요한 것인가요?