我有一个应用程序,允许用户输入带有占位符的SQL字符串,用于我的应用程序生成的某些值。应用程序将使用值替换占位符,并通过各种数据库后端执行SQL字符串。
对于ODBC后端,我在SQL strin上调用SQLExecDirect(),它对常规查询很有效,但对于带参数的存储过程则失败。
是否有一种简单的方法来扩展此机制以支持存储过程? SQL必须以何种方式编写?
我现在唯一能想到的就是开始解析SQL字符串并调用SQLBindParameter()n次,如果它包含“调用”。但解析SQL很棘手。
有什么想法吗?
使用SQL示例:从foo中选择columnA,其中columnB ='%placeholder'
非工作SQL:CALL StoredFoo('%placeholder')
答案 0 :(得分:2)
How to call stored procedures (ODBC):
将过程作为RPC运行
构造一个使用ODBC CALL转义序列的SQL语句。 该语句使用参数标记 对于每个输入,输入/输出和 输出参数,并为 程序返回值(如果有):
{? = CALL procname (?,?)}
为每个输入,输入/输出和输出调用SQLBindParameter 参数,以及程序 返回值(如果有的话)。
- 醇>
使用
SQLExecDirect
执行语句。
否则,您需要将该过程作为普通批处理(而不是RPC调用)执行,即。你需要运行批处理:
EXEC procname @param1, @param2, @param3...;