• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

DBBind에 대한 질문입니다.

23.04.01 04:41 작성 23.04.01 04:42 수정 조회수 305

0

DBBind 클래스에 _paramIndex와 _columnIndex 필드가 있는데 어떤 역할을 하고 있는지 모르겠습니다.

코드를 따라가 보면 ::SQLBindParameter 함수의 마지막 인자로 들어가게 되는데, 결국 모든 경우에 0을 전달하게 됩니다.

그렇다면 굳이 이럴 필요 없이 0을 전달하면 되는 것 아닌가요?

 

답변 2

·

답변을 작성해보세요.

0

image

image당장 '값'을 전달하는 목적이 아니라, '공간'을 할당해서 전달한다고 생각하시면 됩니다.
기본적으로는 0 초기화 되어 있지만, 실제로 DBConnection 함수 내부에서
길이를 전달할 때 위와 같이 덮어 써서 사용하고 있습니다.

akrhwkwk님의 프로필

akrhwkwk

질문자

2023.04.03

그러니까 DBConnection의 DBBind 함수에서 _paramIndex의 값을 변경해 준 것이고,

이 변경된 _paramIndex의 값을 DBBind 클래스에서 활용할 가능성을 염두에 둔 것인가요?

아니면 어차피 SQLBindParameter 함수에 공간을 할당해서 넘겨주어야 하기 때문에 필요한 것인가요?

0

관련 함수의 MSDN 문서를 살펴보시기 바랍니다.
항상 0이 아니라, 문자열이나 binary 데이터 등에서는 길이 등을 넣게 됩니다.

akrhwkwk님의 프로필

akrhwkwk

질문자

2023.04.03

관련 함수의 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, &paramIndex[idx]);

_paramFlag |= (1LL << idx);

}

이렇게 말이죠.

그런데 이상한 점은, 이 _paramIndex 가 처음 0으로 초기화 된 이후 다른 값으로 바뀌질 않는다는 점입니다. 결국 모든 경우에 DBConnection::BindParam 함수에 0을 전달하게 됩니다. _columnIndex 필드에 대해서도 마찬가지 입니다.

이러면 _paramInndex의 존재의 이유가 무엇인가요?