在过去几年中,我一直在维护一个使用某种形式的非ADO数据库连接的大型C ++应用程序(v100),但效果很好。
在此期间,从数据库中获取结果集非常简单。我使用数据库对象实例化返回类,然后打开查询。
CUpdates cUpdates(GetDatabase());
CString strQuery = "SELECT * FROM Updates";
cUpdates.Open(-1, strQuery);
就是这么简单,cUpdates充满了记录。
现在,我们想要执行存储过程,并从中返回结果。但无论我尝试什么,即使将'EXEC'改为'CALL',呼叫也会失败。是否有类似的简单方法来执行存储过程并返回结果,而不必完全重写应用程序处理数据库连接和返回数据的方式?
strQuery.Format("EXEC dbo.[GetUpdates_ComputerName] '%s', %d, %d", GetWorkstationName(), m_bRetainUpdates, m_bScheduleUpdate);
cUpdates.Open(-1, strQuery); //FAILS ON EXEC
(我已在SSMS中测试过EXEC语句,并且工作正常)
我们还使用另一个sql命令来严格执行语句,但我看不到用它返回数据的方法。也许有一个我不知道的类似命令?
GetDatabase()->ExecuteSQL(strQuery);
注意:为了记录,我是C#开发人员(从1.0 beta开始)。我在c ++方面的唯一经验是在过去两年中一直在学习,偶尔会维护一些庞大的系统。
答案 0 :(得分:0)
CRecordset似乎无法处理其中的EXEC语句。所以我们将新的存储过程转换为表格函数,所以我可以使用SELECT代替......它可以正常工作。 (虽然我宁愿使用存储过程)