VC中如何调用存储过程???急救!!!

linxioc 2006-07-24 07:15:14
例如我写了一个存储过程,我在VC中要怎么调用?
比如我调用一个SQL语句时是这样:
m_pRecordset->Open("SELECT * FROM table1",m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
那么我要调用一个存储过程时要如何来写,是将上面的SQL语句字符串替换为存储过程字符串吗???
我试过了,直接替换后会运时出错,请问大侠要怎么调用???小弟谢谢了
...全文
805 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
思危 2006-08-07
  • 打赏
  • 举报
回复
VC执行一个不带参数的存储过程,返回一个记录集:

m_pRecordSet.CreateInstance("ADODB.Recordset");
#ifdef _DEBUG
if (m_pRecordSet == NULL)
{
AfxMessageBox("RecordSet 对象创建失败! 请确认是否初始化了COM环境.");
return;
}
#endif
ASSERT(m_pRecordSet != NULL);
CString sql="TestGet";
int i,recordcount;
try
{
m_pRecordSet->Open((_variant_t)sql,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdStoredProc);
recordcount=m_pRecordSet->GetRecordCount();//Get records total.
if(!m_pRecordSet->adoEOF)
{
for(i=0;i<recordcount;i++)
{
AfxMessageBox((LPCTSTR)(_bstr_t)m_pRecordSet->GetCollect("Account"));
m_pRecordSet->MoveNext();
}
}
m_pRecordSet->Close();
}
catch(_com_error e)
{
CString temp;
temp.Format(_T("Warning: 打开记录集发生异常. 错误信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
AfxMessageBox(temp);
}

如果不用存储过程将sql变量改成sql语句就可以了.



VC执行一个带参数的存储过程,返回单个值:

CString retu;
m_pCommand.CreateInstance("ADODB.Command");
#ifdef _DEBUG
if (m_pCommand == NULL)
{
AfxMessageBox("Command 对象创建失败! 请确认是否初始化了COM环境.");
}
#endif
ASSERT(m_pCommand != NULL);
//输入参数 Member
_ParameterPtr pParamMember;
pParamMember.CreateInstance("ADODB.Parameter");
pParamMember->Name="member"; //所用存储过程参数名称
pParamMember->Type=adChar; //参数类型
pParamMember->Size=32; //参数大小
pParamMember->Direction=adParamInput;//表明是输入参数
pParamMember->Value=_variant_t(member);
m_pCommand->Parameters->Append(pParamMember);
//返回值
_ParameterPtr pParamOk;
pParamOk.CreateInstance("ADODB.Parameter");
pParamOk->Name="welcome"; //参数2名称
pParamOk->Type=adChar; //字符串
pParamOk->Size=70; //大小为70个字节
pParamOk->Direction=adParamOutput; //声明是输出参数
m_pCommand->Parameters->Append(pParamOk);
//执行存储过程
m_pCommand->ActiveConnection=m_pConnection;
m_pCommand->CommandText="GetWelcome"; //存储过程名称
m_pCommand->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
m_pCommand->Execute(NULL, NULL, adCmdStoredProc);
retu=(char*)_bstr_t(pParamOk->Value);
pParamMember->Release();
return retu;
sh_caizicheng 2006-08-06
  • 打赏
  • 举报
回复
学习中
joan_16 2006-07-28
  • 打赏
  • 举报
回复
pCmdKPI->ActiveConnection = m_DBKPI; //pConnection是有效的,已处理过的
pCmdKPI->CommandText = "dbo.jm_kpi";
pCmdKPI->CommandType = adCmdStoredProc;
pCmdKPI->CommandTimeout = 15;

VARIANT var ;
var.vt = VT_BSTR;
var.bstrVal = _bstr_t(date1); //带入的实参
pParamKPI1->Type = adVarChar;
pParamKPI1->Size = 10;
pParamKPI1->Direction = adParamInput;
pParamKPI1->Value = var;
pCmdKPI->Parameters->Append(pParamKPI1);

var.vt = VT_BSTR;
var.bstrVal = _bstr_t(date2); //带入的实参
pParamKPI2->Type = adVarChar;
pParamKPI2->Size = 10;
pParamKPI2->Direction = adParamInput;
pParamKPI2->Value = var;
pCmdKPI->Parameters->Append(pParamKPI2);
try
{
pCmdKPI->Execute(NULL,NULL,adCmdStoredProc);
m_Report_KPI =m_Application_KPI->OpenReport ("report\\KPIReport.rpt");
//数据库服务器10.100.1.114,数据库名BDC,用户名sa,密码sql
m_Report_KPI->Database->Tables ->Item [1]->SetLogOnInfo("10.100.1.114","BDC","sa","sql");
querysql = _bstr_t("CStr(CDate({JMLOGINFO.log_date})) in '" + date1 + "' to '" + date2 + "' and trim({JMLOGINFO.ord_code}) <> '' and NOT iSNull({JMLOGINFO.ord_code})");
m_Report_KPI->PutRecordSelectionFormula(querysql);
//将m_Report与报表控件连接
m_CRViewer_KPI.SetReportSource(m_Report_KPI);
//显示报表工具条
m_CRViewer_KPI.SetDisplayToolbar (TRUE);
//不显示报表左边的分组树
m_CRViewer_KPI.SetDisplayGroupTree (FALSE);
//不显示控件边框
m_CRViewer_KPI.SetDisplayBorder (FALSE);
//刷新数据
m_CRViewer_KPI.Refresh();
m_CRViewer_KPI.UpdateData(TRUE);
//显示报表内容
m_CRViewer_KPI.ViewReport();
}
catch(_com_error &e)
{
CString err1;
err1.Format("%s", (char*)(e.Description()) );
AfxMessageBox("存储过程执行失败!"+err1);
}

4,011

社区成员

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

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