인프런 커뮤니티 질문&답변

akrhwkwk님의 프로필 이미지
akrhwkwk

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

DB Bind

DBBind에 대한 질문입니다.

작성

·

401

·

수정됨

0

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

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

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

 

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

image

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

akrhwkwk님의 프로필 이미지
akrhwkwk
질문자

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

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

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

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

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

akrhwkwk님의 프로필 이미지
akrhwkwk
질문자

관련 함수의 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의 존재의 이유가 무엇인가요?

akrhwkwk님의 프로필 이미지
akrhwkwk

작성한 질문수

질문하기