Поделиться через


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 разрешает на переменную элемента в пределах текущей области.

    ) отмечает конец блока привязки данных.

    Если командная строка содержит один или несколько описатели как [in], [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.

    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="".

    Если не указать значение bindings" db_command анализирует привязки блок параметров, выполняя поиск '(', за которым следуют [bindtype] в брекетах, выполните одну или несколько уже объявлен переменные-члены C++, ')'. Весь текст между скобками будет обнажано из появившегося команды, и эти параметры будут использоваться для создания привязки столбцов и параметра для данной команды.

  • bulk_fetch(необязательно)
    Целое число, указывающее количество строк для выборки.

    Значение по умолчанию 1, что указывает выборка одной строки (набор строк будет иметь тип CRowset).

    Значение больше 1 задает пакетную выборку строк. Пакетная выборка строк понимается способность массовых наборов строк к маркерам нескольких строк выборки (набор строк будет иметь тип CBulkRowset и без доставки SetRows с указанным числом строк).

    If bulk_fetch меньше единицы, SetRows возвращает ноль.

Заметки

db_command создает a CCommand объект, который использует объектом-получателем OLE DB в одно команду.

Можно использовать db_command либо с классом или областью функции; основное различие область CCommand объект. С областью функции, как привязки завершены данные в конце функции. и использования области класса и функции включают класс шаблона объекта-получателя OLE DB **CCommand<>**аргументы шаблона отличаются только в случаях функции и класса. В этом случае будут внесены в функции привязок Метод доступа он состоит из локальных переменных, пока потребление класса вывести a CAccessor- производный класс в качестве аргумента. При использовании в качестве атрибута класса, db_command работает совместно с db_column.

db_command может использоваться для выполнения команд, которые не возвращают результирующий набор.

Когда поставщик атрибута объекта-получателя применяет этот атрибут к классу компилятор переименовывает класс, _YourClassNameметод доступа, где YourClassName имя указанного класса, и компилятор также создает класс YourClassName, что является производным от _YourClassNameметод доступа. В представлении классов отобразится оба класса.

Пример

Этот образец определяет команду, которая выбирает имена и фамилии сотрудников из таблицы, в которой столбец state "центру сертификации". db_command создает и считывает набор строк, в котором можно вызвать мастер-произведено действуете как OpenAll и CloseAllи CRowset функции-члены как MoveNext.

Видит, что этот код необходимо предоставить собственную строку подключения, которая подключается к базе данных pubs. Сведения о том, как сделать это в интегрированной среде разработки см. в разделе Как Добавлять новые подключения к данным в обозревателе серверов/обозревателе баз данныхи Практическое руководство. Подключение к базе данных в обозревателе сервера .

// 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 на классах 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участник, метод local

Repeatable

Нет

Обязательные атрибуты

None

Недопустимые атрибуты

None

Дополнительные сведения о контекстах атрибута см. в разделе Контексты атрибута.

См. также

Другие ресурсы

Атрибуты потребителя OLE DB

Изолированные атрибуты

Attributes Samples