通过ODBC执行存储过程

时间:2010-08-17 17:09:02

标签: sql stored-procedures odbc unixodbc

我有一个应用程序,允许用户输入带有占位符的SQL字符串,用于我的应用程序生成的某些值。应用程序将使用值替换占位符,并通过各种数据库后端执行SQL字符串。

对于ODBC后端,我在SQL strin上调用SQLExecDirect(),它对常规查询很有效,但对于带参数的存储过程则失败。

是否有一种简单的方法来扩展此机制以支持存储过程? SQL必须以何种方式编写?

我现在唯一能想到的就是开始解析SQL字符串并调用SQLBindParameter()n次,如果它包含“调用”。但解析SQL很棘手。

有什么想法吗?

使用SQL示例:从foo中选择columnA,其中columnB ='%placeholder'

非工作SQL:CALL StoredFoo('%placeholder')

1 个答案:

答案 0 :(得分:2)

How to call stored procedures (ODBC)

  

将过程作为RPC运行

     
      
  1. 构造一个使用ODBC CALL转义序列的SQL语句。   该语句使用参数标记   对于每个输入,输入/输出和   输出参数,并为   程序返回值(如果有):

         

    {? = CALL procname (?,?)}

  2.   
  3. 为每个输入,输入/输出和输出调用SQLBindParameter   参数,以及程序   返回值(如果有的话)。

  4.   
  5. 使用SQLExecDirect执行语句。

  6.   

否则,您需要将该过程作为普通批处理(而不是RPC调用)执行,即。你需要运行批处理:

EXEC procname @param1, @param2, @param3...;