我在VC中调用下面的存储过程,想获取输出值,但是获取不了,
1\如果把EXEC master.dbo.xp_cmdshell那一行注释掉就可以获取输出值,
2\或在查询分析器中执行也可以获取输出值
请各位高手帮忙看一看
CREATE procedure dbo.sp_returndate
@res char(8) output 
as
begin
EXEC master.dbo.xp_cmdshell 'dtsrun /S127.0.0.1 /Usa /P /Nmy_work'
select @res=convert(char(8),max(data_date),112) from log where status='success'
end
GO
CString okdate;//用于得到存储过程返回的日期
_ConnectionPtr m_pConnection;
HRESULT hr;
hr=m_pConnection.CreateInstance(__uuidof(Connection));
CString tmpconn;
_bstr_t connstr;
tmpconn.Format("Provider=SQLOLEDB;driver=SQL Server;SERVER=%s;DATABASE=cas_db;UID=sa;PWD=%s;",g_sqlip,m_sqlpasswd); 
connstr=_bstr_t(tmpconn); 
m_pConnection->Open(connstr,"","",-1);
_CommandPtr m_pCommand;
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection = m_pConnection;
//执行存储过程(存储过程中调用DTS包)
_variant_t vvar1;
vvar1 = _variant_t(_bstr_t(okdate)); 
_ParameterPtr mp_var1;
mp_var1.CreateInstance(__uuidof(Parameter));
mp_var1 = m_pCommand -> CreateParameter("res",adVarChar,adParamOutput,8,vvar1);
m_pCommand->Parameters->Append(mp_var1); 
m_pCommand->Parameters->GetItem("res")->Value=(_bstr_t)okdate;
m_pCommand->Parameters->Refresh(); 
m_pCommand->CommandType=adCmdStoredProc;
m_pCommand->CommandText=_bstr_t("sp_resokdate");
m_pCommand->Execute(NULL,NULL,adCmdStoredProc);//执行存储过程
okdate=(char*)(_bstr_t)m_pCommand->Parameters->GetItem("res")->GetValue(); //获取输出值
AfxMessageBox(okdate)

解决方案 »

  1.   

    ?(2\或在查询分析器中执行也可以获取输出值)什么意思?有log这个表吗?
      

  2.   

    CREATE procedure dbo.sp_returndate
    @res char(8) output 
    as
    begin
    set nocount on
    EXEC master.dbo.xp_cmdshell 'dtsrun /S127.0.0.1 /Usa /P /Nmy_work'
    set nocount off
    select @res=convert(char(8),max(data_date),112) from log where status='success'
    end
    GO
      

  3.   

    set nocount on
    EXEC master.dbo.xp_cmdshell 'dtsrun /S127.0.0.1 /Usa /P /Nmy_work'
    set nocount off