如何用vc调用sql server的存储过程?请给出详细代码!谢谢!@

kang_21 2002-05-09 08:40:44
...全文
58 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawninautumn 2002-05-09
  • 打赏
  • 举报
回复
定义 _RecordsetPtr pRs ;
_CommandPtr pComm,pCommRs ;
_ParameterPtr pPara1,pPara2,pPara3,pPara4,pPara5;
_ConnectionPtr pConnsql ;

先CreateADOCom(),再SeekSqlDbf(),注意connstrSql,别错了。

BOOL CSmsSenderDlg::CreateADOCom()
{
if (CoInitialize(NULL) == S_OK )
m_bIsInited = TRUE ;
pRs = NULL;
pComm = NULL;
pCommRs = NULL;
pConnsql = NULL;
//("正在连接到数据库...");
try
{
pConnsql.CreateInstance(__uuidof(Connection));
pComm.CreateInstance(__uuidof(Command));
// pCommRs.CreateInstance(__uuidof(Command));
pRs.CreateInstance(__uuidof(Recordset));
//if ((pComm != NULL)||(pRs != NULL)||(pConnsql != NULL)||(pCommRs != NULL))
if ((pComm != NULL)||(pRs != NULL)||(pConnsql != NULL))
;
else
{
//ShowStatus("创建连接对象错");
return FALSE;
}
//CString connstrSql="Uid=sa; Pwd=; dsn=hldg;database=HLDG"; //use ODBC
//CString connstrSql="Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=SZQX;Data Source=bryant"; //NOT use ODBC

//CString connstrSql= "Uid="+m_SqlUid +";Pwd="+ m_SqlPwd +";dsn="+m_SqlDsn +";"; //use ODBC
CString connstrSql= "Provider=SQLOLEDB.1;Persist Security Info=True;";
connstrSql += "User ID="+m_SqlUid +";Password="+ m_SqlPwd +";Initial Catalog="+m_DatabaseName +";Data Source="+m_ServerName;

pConnsql->Open(_T(_bstr_t(connstrSql)),_T(""),_T(""),adModeUnknown);
pComm->ActiveConnection=pConnsql;
pComm->CommandText="xp_processconfirm";//过程名
pComm->CommandType=adCmdStoredProc;
pComm->CommandTimeout= 5 ;



pPara1=pComm->CreateParameter("ntype",adInteger,adParamInput,sizeof(int)) ;
pPara2=pComm->CreateParameter ("fid",adVarChar,adParamInput,14);
pPara3=pComm->CreateParameter("fflag",adVarChar,adParamInput,1) ;
pPara4=pComm->CreateParameter ("iRet",adInteger,adParamOutput,sizeof(int));

pComm->Parameters->Append (pPara1) ;
pComm->Parameters->Append (pPara2);
pComm->Parameters->Append (pPara3) ;
pComm->Parameters->Append (pPara4);
}
catch(_com_error &e)
{
return FALSE;
}
return TRUE;
}


void CSmsSenderDlg::SeekSqlDbf()
{

_variant_t value,b;
CString strTemp ;
long nRecordCount = 0 ,nSmsCount = 0 ,nType=1;

_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);
_variant_t vtEmpty2(DISP_E_PARAMNOTFOUND, VT_ERROR);

try
{
nType = 1 ;
pPara1->Value = _variant_t(nType);//ntype
pPara2->Value = _variant_t("");//fid
pPara3->Value = _variant_t("");//fflag
pComm->CommandText="xp_processconfirm";//过程名
pRs = pComm->Execute(&vtEmpty,&vtEmpty2,adCmdStoredProc );

value = pPara4->Value ; //iRet
value.ChangeType(VT_INT);

//("成功打开纪录集...");
while(!pRs->ENDofsmsfile)
{
nRecordCount ++ ;
value=pRs->GetCollect("fid");
value.ChangeType(VT_BSTR);
strTemp=value.bstrVal;
strTemp.TrimLeft(" ");
strTemp.TrimRight(" ");
strcpy(m_pwdInfo.fid,strTemp);

pRs->MoveNext();
}

pRs->Close();
//("已关闭记录集...");
}
catch(_com_error &e)
{
return ;
}
}

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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