다음을 통해 공유


db_command

OLE DB 명령을 만듭니다.

구문

[ db_command(command, name, source_name, hresult, bindings, bulk_fetch) ]

매개 변수

command
OLE DB 명령의 텍스트를 포함하는 명령 문자열입니다. 다음은 간단한 예제입니다.

[ db_command ( command = "Select * from Products" ) ]

구문은 command 다음과 같습니다.

바인딩 매개 변수 블록 1
  OLE DB 명령
바인딩 매개 변수 블록 2
  OLE DB 명령의 연속
바인딩 매개 변수 블록 3
...

binding parameter block 은 다음과 같이 정의됩니다.

(bindtype szVar1 [, szVar2 [, nVar3 [, ...]]])

여기서

  • ( 는 데이터 바인딩 블록의 시작을 표시합니다.

  • bindtype 는 대/소문자를 구분하지 않는 다음 문자열 중 하나입니다.

    • [db_column] 는 각 멤버 변수를 행 집합의 열에 바인딩합니다.

    • [bindto] (와 동일 [db_column]).

    • [in] 는 멤버 변수를 입력 매개 변수로 바인딩합니다.

    • [out] 는 멤버 변수를 출력 매개 변수로 바인딩합니다.

    • [in,out] 는 멤버 변수를 입력/출력 매개 변수로 바인딩합니다.

  • szVarN, nVarN 은 현재 범위 내의 멤버 변수로 확인됩니다.

  • ) 는 데이터 바인딩 블록의 끝을 표시합니다.

명령 문자열에 하나 이상의 지정자(예: [in]< [out]a0/>)가 포함되어 있으면 [in/out]db_command 매개 변수 맵을 작성합니다.

명령 문자열에 하나 이상의 매개 변수(예: [db_column] 또는 [bindto]) db_command 가 포함된 경우 행 집합과 접근자 맵을 모두 생성하여 이러한 바인딩된 변수를 서비스합니다. 자세한 내용은 db_accessor를 참조하세요.

참고 항목

bindtype 구문 및 bindings 매개 변수는 클래스 수준에서 사용할 db_command 때 유효하지 않습니다.

바인딩 매개 변수 블록의 몇 가지 예는 다음과 같습니다. 다음 예제에서는 데이터베이스의 m_au_fname 작성자 테이블과 열에 각각 데이터 멤버와 m_au_lname au_lname 데이터 멤버 au_fnamepubs 바인딩합니다.

TCHAR m_au_fname[21];
TCHAR m_au_lname[41];
TCHAR m_state[3] = 'CA';

[db_command (command = "SELECT au_fname([bindto]m_au_fname), au_lname([bindto]m_au_lname) " \
   "FROM dbo.authors " \
   "WHERE state = ?([in]m_state)")
]

name
(선택 사항) 행 집합 작업에 사용하는 핸들의 이름입니다. 지정 namedb_command 하는 경우 행 집합을 트래버스하거나 여러 작업 쿼리를 실행하는 데 사용할 수 있는 지정된 name클래스를 생성합니다. 지정 name하지 않으면 사용자에게 둘 이상의 결과 행을 반환할 수 없습니다.

source_name
(선택 사항) CSession 특성이 적용되어 명령이 실행되는 클래스의 db_source 변수 또는 인스턴스. db_source을 참조하세요.

db_command 지정된 변수가 함수 또는 전역 범위에 있어야 하므로 사용된 source_name 변수가 유효한지 확인합니다.

hresult
(선택 사항) 이 데이터베이스 명령의 HRESULT를 수신할 변수를 식별합니다. 변수가 없으면 특성에 의해 자동으로 삽입됩니다.

bindings
(선택 사항) OLE DB 명령에서 바인딩 매개 변수를 구분할 수 있습니다.

값을 bindingsdb_command 지정하는 경우 연결된 값을 구문 분석하고 매개 변수를 bindtype 구문 분석하지 않습니다. 이 방법에서는 OLE DB 공급자 구문을 사용할 수 있습니다. 바인딩 매개 변수 없이 구문 분석을 사용하지 않도록 설정하려면 .를 지정합니다 Bindings="".

값을 bindingsdb_command 지정하지 않으면 바인딩 매개 변수 블록을 구문 분석합니다. ''(를 찾은 bindtype 다음, 대괄호 안에 묶은 다음, 이전에 선언된 하나 이상의 C++ 멤버 변수와 '')를 찾습니다. 결과 명령의 괄호 사이에 있는 모든 텍스트를 제거합니다. 이러한 매개 변수는 이 명령에 대한 열 및 매개 변수 바인딩을 생성하는 데 사용됩니다.

bulk_fetch
(선택 사항) 가져올 행 수를 지정하는 정수 값입니다.

기본값은 단일 행 가져오기를 지정하는 1입니다(행 집합은 형식 CRowset이 됩니다).

1보다 큰 값은 대량 행 페치를 지정합니다. 대량 행 가져오기는 여러 행 핸들을 가져오는 대량 행 집합의 기능을 의미합니다(행 집합은 형식 CBulkRowset 이며 지정된 수의 행을 사용하여 호출 SetRows 됨).

1보다 작은 경우 bulk_fetch 0을 SetRows 반환합니다.

설명

db_commandCCommand OLE DB 소비자가 명령을 실행하는 데 사용하는 개체를 만듭니다.

클래스 또는 함수 범위와 함께 사용할 db_command 수 있습니다. 주요 차이점은 개체의 CCommand 범위입니다. 함수 범위를 사용하는 경우 바인딩 같은 데이터는 함수 끝에서 종료됩니다. 클래스 사용과 함수 범위 사용 모두 OLE DB 소비자 템플릿 클래스 CCommand<>를 포함하지만, 템플릿 인수는 함수와 클래스의 경우에 따라 다릅니다. 함수의 경우 지역 변수를 포함하는 Accessor에 대해 바인딩이 이루어지지만, 클래스 사용의 경우 CAccessor 파생 클래스를 인수로 유추합니다. 클래스 특성 db_command 으로 사용되는 경우 .와 db_column함께 작동합니다.

db_command 는 결과 집합을 반환하지 않는 명령을 실행하는 데 사용할 수 있습니다.

소비자 특성 공급자가 이 특성을 클래스에 적용하면 컴파일러는 클래스 이름을 클래스 _[YourClassName]Accessor의 이름으로 바꿉니다. 여기서 [YourClassName] 클래스에 지정한 이름입니다. 또한 컴파일러는 .에서 _[YourClassName]Accessor파생되는 클래스를 [YourClassName]만듭니다. 클래스 뷰에는 두 클래스가 모두 표시됩니다.

예제

이 샘플에서는 상태 열이 'CA'와 일치하는 테이블에서 성과 이름을 선택하는 명령을 정의합니다. db_command는 마법사에서 생성된 함수(예: OpenAllCloseAllCRowset 및 )와 같은 멤버 함수를 호출할 수 있는 행 집합을 만들고 읽습니다.MoveNext

이 코드를 사용하려면 데이터베이스에 연결하는 고유한 연결 문자열 제공해야 합니다pubs. 개발 환경에서 연결 문자열 제공하는 방법에 대한 자세한 내용은 방법: 데이터베이스에 연결하고 기존 개체를 찾아보고 새 연결 추가를 참조하세요.

원본 파일 db_command.h:

// db_command.h
#include <atlbase.h>
#include <atlplus.h>
#include <atldbcli.h>

#pragma once

[  db_source(L"your connection string"), db_command(L" \
      SELECT au_lname, au_fname \
      FROM dbo.authors \
      WHERE state = 'CA'")  ]

struct CAuthors {
   // In order to fix several issues with some providers, the code below may bind
   // columns in a different order than reported by the provider

   DBSTATUS m_dwau_lnameStatus;
   DBSTATUS m_dwau_fnameStatus;
   DBLENGTH m_dwau_lnameLength;
   DBLENGTH m_dwau_fnameLength;

   [ db_column("au_lname", status="m_dwau_lnameStatus", length="m_dwau_lnameLength") ] TCHAR m_au_lname[41];
   [ db_column("au_fname", status="m_dwau_fnameStatus", length="m_dwau_fnameLength") ] TCHAR m_au_fname[21];

   [ db_param("7", paramtype="DBPARAMIO_INPUT") ] TCHAR m_state[3];

   void GetRowsetProperties(CDBPropSet* pPropSet) {
      pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
      pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
   }
};

원본 파일 db_command.cpp:

// db_command.cpp
// compile with: /c
#include "db_command.h"

int main(int argc, _TCHAR* argv[]) {
   HRESULT hr = CoInitialize(NULL);

   // Instantiate rowset
   CAuthors rs;

   // Open rowset and move to first row
   strcpy_s(rs.m_state, sizeof(rs.m_state), _T("CA"));
   hr = rs.OpenAll();
   hr = rs.MoveFirst();

   // Iterate through the rowset
   while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET ) {
      // Print out the column information for each row
      printf("First Name: %s, Last Name: %s\n", rs.m_au_fname, rs.m_au_lname);
      hr = rs.MoveNext();
   }

   rs.CloseAll();
   CoUninitialize();
}

이 샘플에서는 데이터 소스 클래스 db_sourceCMySource, 명령 클래스 db_commandCCommand1CCommand2를 사용합니다.

// db_command_2.cpp
// compile with: /c
#include <atlbase.h>
#include <atlplus.h>
#include <atldbcli.h>
// class usage for both db_source and db_command

[  db_source(L"your connection string"), db_command(L" \
      SELECT au_lname, au_fname \
      FROM dbo.authors \
      WHERE state = 'CA'")  ]
struct CMySource {
   HRESULT OpenDataSource() {
      return S_OK;
   }
};

[db_command(command = "SELECT * FROM Products")]
class CCommand1 {};

[db_command(command = "SELECT FNAME, LNAME FROM Customers")]
class CCommand2 {};

int main() {
   CMySource s;
   HRESULT hr = s.OpenDataSource();
   if (SUCCEEDED(hr)) {
      CCommand1 c1;
      hr = c1.Open(s);

      CCommand2 c2;
      hr = c2.Open(s);
   }

   s.CloseDataSource();
}

요구 사항

특성 컨텍스트
적용 대상: class, struct멤버, 메서드, 로컬
반복 가능 아니요
필수 특성 None
잘못된 특성 None

특성 컨텍스트에 대한 자세한 내용은 특성 컨텍스트를 참조 하세요.

참고 항목

OLE DB 소비자 특성
독립 실행형 특성