mfc调用SQL存储过程的问题???
我在SQL里建立了一个存储过程,请问在VC里调用不啊?以下为建立的存储过程
create procedure reader_insert
(@p_Rid varchar(12),
@p_Rname varchar(12),
@p_Rno varchar(12),
@p_Runit varchar(12),
@p_Rindentify varchar(10),
@p_Rsex char(2),
@p_Rtel varchar(12),
@p_Rbegin datetime,
@p_Rend datetime,
@p_Rfoul char(2),
@p_Rremark varchar(50)=null)
as
insert into reader(Rid,Rname,Rno,Runit,Ridentify,Rsex,Rtel,Rbegin,Rend,Rremark)
values(@p_Rid,@p_Rname,@p_Rno,@p_Runit,@p_Rindentify,@p_Rsex,@p_Rtel,@p_Rbegin,@p_Rend,@p_Rremark)
还需要什么输出参数不啊?如果能直接调用这存储过程,语句怎么用啊?谢谢啊
[最优解释]
ADO方式执行存储过程,带参数传递,你可以参考下
//执行存储过程。
_RecordsetPtr& ADOConn::ExecuteSP(_bstr_t bstrSQL, _variant_t vtdays)
{
try
{
// 是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn();
// Connection对象的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pCommand.CreateInstance(__uuidof(Command));
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandText = bstrSQL;//存储过程名
m_pCommand->PutCommandType(adCmdStoredProc);
m_pCommand->Parameters->Refresh();//从数据库查询参数信息
//接下来对每一个参数赋值。
long cnt = m_pCommand->Parameters->GetCount();//取得参数的个数
for(long k = 1; k<cnt; k++)
{//由于ADO中认为返回值是第一个参数, 因此这里用k=1过滤第一个参数
m_pCommand->Parameters->GetItem(k)->Value = vtdays; //按存储过程的参数顺序给参数赋值。
}
//执行这个存储过程
m_pRecordset = m_pCommand->Execute(0,0,adCmdStoredProc);
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
return m_pRecordset;
}
param = cmd->CreateParameter("v_nMaxNum",adVarNumeric,adParamInput,4,_variant_t( lCallNum, VT_I4 )); //最大选择数
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nSelNum",adInteger,adParamOutput,sizeof(int),va);
cmd->Parameters->Append(param);
/* 执行存储过程 */
cmd->ActiveConnection = CAdoData.pDBConn;
cmd->CommandType = adCmdStoredProc;
//cmd->CommandText = _bstr_t("CalloutAssign_PKG.insert_yyljtzb");
cmd->CommandText = _bstr_t("insert_yyljtzb");
[其他解释]
很感谢上述的例子,但是执行该函数时参数的类型并不是_variant_t类型,括号里要怎么写呢?急用,急用