Compartir a través de


Ejecución directa ODBC

La ejecución directa es la manera más sencilla de ejecutar una instrucción. Cuando se envía la instrucción para su ejecución, el origen de datos la compila en un plan de acceso y, a continuación, ejecuta ese plan de acceso.

La ejecución directa se usa normalmente en aplicaciones genéricas que compilan y ejecutan instrucciones en tiempo de ejecución. Por ejemplo, el código siguiente compila una instrucción SQL y la ejecuta una sola vez:

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

La ejecución directa funciona mejor para las instrucciones que se ejecutarán una sola vez. Su principal inconveniente es que la instrucción SQL se analiza cada vez que se ejecuta. Además, la aplicación no puede recuperar información sobre el conjunto de resultados creado por la instrucción (si existe) hasta después de ejecutar la instrucción. Esto es posible si la instrucción está preparada y ejecutada en dos pasos independientes.

Para ejecutar una instrucción directamente, la aplicación realiza las siguientes acciones:

  1. Establece los valores de cualquier parámetro. Para obtener más información, vea Parámetros de la instrucción, más adelante en esta sección.

  2. Llama a SQLExecDirect y lo pasa una cadena que contiene la instrucción SQL.

  3. Cuando se llama a SQLExecDirect, el controlador:

    • Modifica la instrucción SQL para usar la gramática SQL del origen de datos sin analizar la instrucción. Esto incluye reemplazar las secuencias de escape descritas en Secuencias de escape en ODBC. La aplicación puede recuperar la forma modificada de una instrucción SQL mediante una llamada a SQLNativeSql. Las secuencias de escape no se reemplazan si se establece el atributo de instrucción SQL_ATTR_NOSCAN.

    • Recupera los valores de parámetro actuales y los convierte según sea necesario. Para obtener más información, vea Parámetros de la instrucción, más adelante en esta sección.

    • Envía la instrucción y los valores de parámetro convertidos al origen de datos para su ejecución.

    • Se devuelven errores. Entre ellos se incluyen la secuenciación o el diagnóstico de estado, como SQLSTATE 24000 (estado de cursor no válido), errores sintácticos, como SQLSTATE 42000 (error de sintaxis o infracción de acceso) y errores semánticos, como SQLSTATE 42S02 (tabla básica o vista no encontrada).