过程参数

过程调用中的参数可以是输入、输入/输出或输出参数。 这不同于所有其他 SQL 语句中的参数,这些参数始终是输入参数。

输入参数用于将值发送到过程。 例如,假设“部件”表包含 PartID、Description 和 Price 列。 InsertPart 过程可能具有表中每列的输入参数。 例如:

{call InsertPart(?, ?, ?)}  

SQLExecDirectSQLExecute 返回SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_INVALID_HANDLE或SQL_NO_DATA之前,驱动程序不应修改输入缓冲区的内容。 当 SQLExecDirectSQLExecute 返回SQL_NEED_DATA或SQL_STILL_EXECUTING时,不应修改输入缓冲区的内容。

输入/输出参数用于将值发送到过程并从过程中检索值。 使用与输入和输出参数相同的参数往往令人困惑,应避免。 例如,假设某个过程接受订单 ID 并返回客户的 ID。 这可以使用单个输入/输出参数进行定义:

{call GetCustID(?)}  

最好使用两个参数:订单 ID 的输入参数和客户 ID 的输出或输入/输出参数:

{call GetCustID(?, ?)}  

输出参数用于检索过程返回值和从过程参数中检索值;返回值的过程有时称为 函数。 例如,假设刚才提到的 GetCustID 过程返回一个值,该值指示它是否能够找到顺序。 在以下调用中,第一个参数是用于检索过程返回值的输出参数,第二个参数是用于指定订单 ID 的输入参数,第三个参数是用于检索客户 ID 的输出参数:

{? = call GetCustID(?, ?)}  

驱动程序处理过程中输入和输入/输出参数的值与处理其他 SQL 语句中的输入参数没有不同。 执行语句时,它们检索绑定到这些参数的变量的值,并将其发送到数据源。

执行语句后,驱动程序会将输入/输出和输出参数的返回值存储在绑定到这些参数的变量中。 只有在提取过程返回的所有结果后,并且SQLMoreResults返回SQL_NO_DATA之后,才能保证这些返回的值已设置。 如果执行语句会导致错误,则未定义输入/输出参数缓冲区或输出参数缓冲区的内容。

应用程序调用 SQLProcedure 以确定过程是否具有返回值。 它调用 SQLProcedureColumns 来确定每个过程参数的类型(返回值、输入、输入/输出或输出)。