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


Прямое выполнение (ODBC)

Прямое выполнение — это самый простой способ выполнения инструкции. При отправке инструкции для выполнения источник данных компилирует его в план доступа, а затем выполняет этот план доступа.

Прямое выполнение обычно используется универсальными приложениями, которые создают и выполняют инструкции во время выполнения. Например, следующий код создает инструкцию SQL и выполняет ее один раз:

SQLCHAR *SQLStatement;  
  
// Build a SQL statement.  
BuildStatement(SQLStatement);  
  
// Execute the statement.  
SQLExecDirect(hstmt, SQLStatement, SQL_NTS);  

Прямое выполнение лучше всего подходит для инструкций, которые будут выполняться один раз. Его основной недостаток заключается в том, что инструкция SQL анализируется каждый раз при выполнении. Кроме того, приложение не может получить сведения о результирующем наборе, созданном оператором (если таковой) до тех пор, пока не будет выполнена инструкция; Это возможно, если инструкция подготовлена и выполнена в двух отдельных шагах.

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

  1. Задает значения любых параметров. Дополнительные сведения см. в разделе "Параметры инструкции" далее в этом разделе.

  2. Вызывает SQLExecDirect и передает строку, содержащую инструкцию SQL.

  3. При вызове SQLExecDirect драйвер:

    • Изменяет инструкцию SQL для использования грамматики SQL источника данных без анализа инструкции; сюда входит замена escape-последовательностей, рассмотренных в escape-последовательностях в ODBC. Приложение может получить измененную форму инструкции SQL, вызвав SQLNativeSql. Escape-последовательности не заменяются, если задан атрибут инструкции SQL_ATTR_NOSCAN.

    • Извлекает текущие значения параметров и преобразует их по мере необходимости. Дополнительные сведения см. в разделе "Параметры инструкции" далее в этом разделе.

    • Отправляет инструкцию и преобразует значения параметров в источник данных для выполнения.

    • Возвращает все ошибки. К ним относятся последовательное или состояние диагностика, такие как SQLSTATE 24000 (недопустимое состояние курсора), синтаксические ошибки, такие как SQLSTATE 42000 (синтаксическая ошибка или нарушение доступа), а также семантические ошибки, такие как SQLSTATE 42S02 (базовая таблица или представление не найдены).