ole db如何调用SQL SERVER中带输入和输出参数得存储过程?

njtlxm 2004-08-07 07:48:11
我使用得是OLE DB模板类,CDataSource、CSession和CCommand等等,执行SQL操作(比如INSERT、DELETE和UPDATE都是用CCommand)。但是一直不知道如何调用SQL SERVER中带输入和输出参数得存储过程(输入和输出参数均为多个)。哪一位有这个方面得经验?

另:不必建议我用ADO,原因有二:
1、此OLE DB封装类已经非常稳定,已经高效稳定运行了3年多。
2、在我个人的详细测试比较,ADO效率不如OLE DB(这一点各位若有不同意见可开新贴讨论,本贴只希望解决我的问题。
...全文
208 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kudeet 2004-08-08
  • 打赏
  • 举报
回复
1 打开CCommand对象,将其TAccessor参数设置为CManualAccessor,
CCommand<CManualAccessor,CRowset,CMultipleResult>* prs;
2 检察IDBSchemaRowset接口,并使用过程参数行集,如果不能得到IDBSchemaRowset借口,继续检察ICommandWithParameters借口,然后用GetParameterInfo读参数信息。
CProcedureParameters *pProcParam =NULL;//过程参数行集
pProcParam = new CProcedureParameters;
//lpszProcName为过程名
if(pProcParam->Open(*m_pSession,NULL,NULL,lpszProcName)==S_OK)
{
while(pProcParam->MoveNext()==S_OK)
{
....//获取参数信息
}
}
3 用AddParameterEntry函数添加每个参数,并设置他们
prs=new CCommand<CManualAccessor,CRowset,CMultipleResults>;
prs->Create(*m_pSession,strCall);//strCall为根据参数信息完成的命令
prs->Prepare(1);
if(ulParam>0)//如果过程有参数
{
prs->CreateParameterAccessor();
for(UINT I=0,I<ulParam,I++)
prs->AddParameterEntry();
}
4 打开行集将参数绑定选项设置为false
5 GetColumnInfo检察输出列,并用AddBindEntry绑定。
6用GetNextResult确定是否有多个行集
Kudeet 2004-08-08
  • 打赏
  • 举报
回复
http://search.csdn.net/Expert/topic/375/375991.xml?temp=.8390161
http://search.csdn.net/Expert/topic/2289/2289299.xml?temp=.7044184
醉马不肖 2004-08-07
  • 打赏
  • 举报
回复
http://dev.csdn.net/article/18/18426.shtm
看看这个

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧