准备和执行语句 (ODBC)

准备一次语句,然后多次执行

  1. 调用 SQLPrepare 函数 来准备语句。

  2. (可选)调用 SQLNumParams 以确定已准备语句中的参数数。

  3. (可选)对于准备语句中的每个参数:

  4. 对于已准备语句的每个执行:

    • 如果语句具有参数标记,请将数据值放入绑定参数缓冲区。

    • 调用 SQLExecute 以执行已准备的语句。

    • 如果使用执行时的数据输入参数, SQLExecute 将返回SQL_NEED_DATA。 使用 SQLParamDataSQLPutData 以区块方式发送数据。

使用列式参数绑定准备语句

  1. 调用 SQLSetStmtAttr 以设置以下属性:

    • 将SQL_ATTR_PARAMSET_SIZE设置为参数集数(S)。

    • 将SQL_ATTR_PARAM_BIND_TYPE设置为SQL_PARAMETER_BIND_BY_COLUMN。

    • 将 SQL_ATTR_PARAMS_PROCESSED_PTR 属性设置为指向 SQLUINTEGER 变量以保存已处理的参数数。

    • 将SQL_ATTR_PARAMS_STATUS_PTR设置为指向 SQLUSSMALLINT 变量的数组[S],以保存参数状态指示器。

  2. 调用 SQLPrepare 以准备语句。

  3. (可选)调用 SQLNumParams 以确定已准备语句中的参数数。

  4. (可选)对于准备语句中的每个参数,调用 SQLDescribeParam 以获取参数信息。

  5. 对于每个参数标记:

    • 分配 S 参数缓冲区数组来存储数据值。

    • 分配 S 参数缓冲区数组以存储数据长度。

    • 调用 SQLBindParameter 将参数数据值和数据长度数组绑定到语句参数。

    • 如果参数是执行时的数据文本或图像参数,请设置它。

    • 如果使用任何数据执行时参数,请设置它们。

  6. 对于已准备语句的每个执行:

    • 将 S 数据值和 S 数据长度放入绑定参数数组中。

    • 调用 SQLExecute 以执行已准备的语句。

    • 如果使用数据执行时输入参数,SQLExecute 将返回SQL_NEED_DATA。 使用 SQLParamData 和 SQLPutData 以区块方式发送数据。

准备具有行绑定参数的语句

  1. 分配结构的数组[S],其中 S 是参数集的数目。 该结构具有每个参数的一个元素,每个元素都有两个部分:

    • 第一部分是用于保存参数数据的相应数据类型的变量。

    • 第二部分是用于保存状态指示器的 SQLINTEGER 变量。

  2. 调用 SQLSetStmtAttr 以设置以下属性:

    • 将SQL_ATTR_PARAMSET_SIZE设置为参数集数(S)。

    • 将SQL_ATTR_PARAM_BIND_TYPE设置为步骤 1 中分配的结构的大小。

    • 将 SQL_ATTR_PARAMS_PROCESSED_PTR 属性设置为指向 SQLUINTEGER 变量以保存已处理的参数数。

    • 将SQL_ATTR_PARAMS_STATUS_PTR设置为指向 SQLUSSMALLINT 变量的数组[S],以保存参数状态指示器。

  3. 调用 SQLPrepare 以准备语句。

  4. 对于每个参数标记,请调用 SQLBindParameter,将参数数据值和数据长度指针指向在步骤 1 中分配的结构数组的第一个元素中的变量。 如果参数是执行时的数据参数,请设置它。

  5. 对于已准备语句的每个执行:

    • 使用数据值填充绑定参数缓冲区数组。

    • 调用 SQLExecute 以执行已准备的语句。 驱动程序为每个参数集有效地执行 SQL 语句 S 时间一次。

    • 如果使用数据执行时输入参数,SQLExecute 将返回SQL_NEED_DATA。 使用 SQLParamData 和 SQLPutData 以区块方式发送数据。

另请参阅

执行查询作指南主题 (ODBC)