db_command

OLE DB 명령을 만듭니다.

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

매개 변수

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

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

    해당 명령 을 구문은 다음과 같습니다.

    binding parameter block 1
       OLE DB command
    binding parameter block 2
       continuation of OLE DB command
    binding parameter block 3
    ...
    

    A 바인딩 매개 변수 블록 는 다음과 같이 정의 됩니다:

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

    다음은 각 문자에 대한 설명입니다.

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

    bindtype 의 다음 대/소문자 구분 문자열입니다.

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

    • [bindto] (와 같은 [db_column]).

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

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

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

    SzVarX 의 멤버 변수는 현재 범위 내에 확인 됩니다.

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

    [Out] [에]와 같은 하나 이상의 지정자는 명령 문자열을 포함 하는 경우 또는 [in/out], db_command 매개 변수 맵 작성 합니다.

    하나 이상의 매개 변수 예: [db_column] 또는 [bindto] 명령 문자열을 포함 하는 경우 db_command 이러한 바인드된 변수로 서비스를 제공 하는 접근자가 지도 하 고 행 집합을 생성 합니다.참조 하십시오 db_accessor 에 대 한 자세한 내용은.

    [!참고]

    bindtype 구문 및bindings 매개 변수를 사용할 때 잘못 된 db_command 클래스 수준입니다.

    바인딩 매개 변수 블록의 일부의 예입니다.바인딩하는 다음 예제에서 m_au_fname 및 m_au_lname 데이터 멤버에는 au_fname 및 au_lname 열, pubs 데이터베이스의 authors 테이블을 각각:

    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)")
    

    ]

  • 이름 (옵션)
    핸들의 이름을 함께 행 집합 작업을 사용 합니다.지정 하는 경우 이름, db_command 에서 지정한 포함 하는 클래스를 생성 이름를 사용할 수 있습니다 행 집합을 통과 하거나 여러 실행 쿼리를 실행할 수.지정 하지 않으면 이름에서 둘 이상의 행을 결과 사용자에 게 반환할 수 없습니다.

  • source_name (옵션)
    CSession 변수 또는 클래스의 인스턴스는 db_source 에 있는 명령을 실행 합니다. 적용 되는 특성입니다.참조 하십시오 db_source.

    db_command 는 사용 되는 변수를 확인 합니다 source_name 함수 또는 전역 범위에 지정 된 변수 수 있습니다 유효 합니다.

  • hresult(선택적 요소)
    받을 수 있는 변수를 식별의 HRESULT 이 데이터베이스 명령을.변수는 존재 하지 않는 경우 특성으로 자동으로 추가 됩니다.

  • 바인딩을 (옵션)
    OLE DB 명령에서 바인딩 매개 변수를 구분할 수 있습니다.

    에 대 한 값을 지정 하면 bindings, db_command 와 연결 된 값을 구문 분석 하 고 구문 분석을 하지는 bindtype 매개 변수입니다.이 사용이 OLE DB 공급자 구문을 사용할 수 있습니다.매개 변수를 바인딩 없이 구문 분석을 사용 하지 않도록 지정 합니다. 바인딩 = "".

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

  • bulk_fetch(옵션)
    반입할 행 수를 지정 하는 정수 값입니다.

    기본값은 단일 행 페칭 (fetching)을 지정 하는 1입니다 (행 집합 형식을 수 있습니다 CRowset).

    대량 행 페칭 (fetching) 1 보다 큰 값을 지정합니다.대량 행 페치 참조 여러 행 핸들을 페치할 대량 행 집합의 능력에 (행 집합 형식 이어야 합니다 CBulkRowset 를 호출 하 고 SetRows 지정 된 수의 행).

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

설명

db_command 생성은 CCommand OLE DB 소비자가 명령을 실행할 때 사용 되는 개체입니다.

사용할 수 있는 db_command 클래스 또는 함수 범위. 주요 차이점 중 하나입니다의 CCommand 개체입니다.함수 범위에 있는 데이터 바인딩 같은 함수 끝에 종료 됩니다.클래스와 함수 범위 용도 포함 OLE DB 소비자 템플릿 클래스 CCommand < >, 하지만 템플릿 인수에 대 한 함수 및 클래스 사례 다.함수의 경우에는 바인딩 수 없습니다는 접근자 는 구성 로컬 변수 클래스 사용 유추 합니다 동안에 CAccessor-파생 클래스를 인수로.클래스 특성 이름으로 사용 하는 경우 db_command 함께 db_column.

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

소비자 특성 공급자 클래스에이 특성을 적용 하는 경우 컴파일러는 클래스 이름을 _ 하YourClassName접근자를 위치 YourClassName 클래스를 제공한 이름입니다 및 컴파일러도 라는 클래스를 만듭니다 YourClassName, _에서 파생 되는YourClassName접근자입니다.클래스 뷰에서 클래스 모두에 표시 됩니다.

예제

이 샘플에서는 상태 열 'C a'와 일치 하는 테이블의 첫 번째 이름과 마지막 이름을 선택 하는 명령을 정의 합니다.db_command 만든 다음을 호출할 수 함수 마법사에서 생성 된 같은 행 집합을 읽고 OpenAll 및 CloseAll, 같은 CRowset 멤버 함수를 MoveNext.

이 코드를 pubs 데이터베이스에 연결 사용자 지정 연결 문자열을 제공할 수 있어야 한다는 유의 하십시오.개발 환경에서이 작업을 수행 하는 방법에 대 한 자세한 내용은 방법: 서버 탐색기에서 데이터베이스에 연결How to: Add New Data Connections in Server Explorer/Database Explorer.

// 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
// 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_source 데이터 소스 클래스에 CMySource, 및 db_command 명령 클래스에서 CCommand1 및 CCommand2.

// 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();
}

요구 사항

컨텍스트 특성

적용 대상

클래스, struct, 멤버, 메서드, 현지

반복 가능

아니요

필수 특성

없음

잘못 된 특성

없음

속성 컨텍스트에 대 한 자세한 내용은 참조 하십시오. 컨텍스트 특성.

참고 항목

기타 리소스

OLE DB 소비자 특성

독립 실행형 특성

Attributes Samples