我定义了一个如下的存储过程:
CREATE PROCEDURE UpdateSon(Pno in char,Eno out integer,Lno out char)
我是这样调用的,有问题,这个地方该怎样来写?
char* strSQL = new char[200];
int error = 0;
CString itemno;
sprintf(strSQL,"{call UpdateSON('%s',error,itemno)}",m_Btl.ItemNo);
TRY
{
m_Mxl.m_pframetempset.m_pDatabase->ExecuteSQL(strSQL);
}
CATCH(CDBException,e)
{
AfxMessageBox(e->m_strError);
}
END_CATCH

解决方案 »

  1.   

    不知你用的什么数据库,如果是Oracle,这句话应为:
    sprintf(strSQL,"begin UpdateSON('%s',error,itemno); end; ", m_Btl.ItemNo);调用存储过程的方法在不同的数据库中是不同的。
      

  2.   

    sprintf(strSQL,"{call UpdateSON('%s',%d,itemno)}",m_Btl.ItemNo,error);
    而且存储过程输出的结果这么写是传不出来的。
      

  3.   

    谢谢,我试试,我用的是ORACLE
      

  4.   

    我是这样写的:
    char* strSQL = new char[200];
    int error = 0;
    CString itemno;
    sprintf(strSQL,"{call UpdateSON('%s',%d,%s)}",m_Btl.ItemNo,error,itemno);
    出现以下错误:
      Syntax error and access violation
    看来还是写错了,请大家看看该怎么写?
      

  5.   

    我觉得应该重载BindParameters或者直接调用SQLBindParameter,绑定参数,并设置参数为SQL_PARAM_OUTPUT,这样才能得到过程的返回的结果。
    可以参靠MFC直接使用ODBC API的例子。
      

  6.   

    可看看以下链接
    http://expert.csdn.net/Expert/topic/1173/1173605.xml?temp=.8254663
    http://expert.csdn.net/Expert/topic/1184/1184458.xml?temp=.8587915
    也可以用ODatabase,这样错可以传递参数,但好像无法取得返回值。
      

  7.   

    也可以用ODatabase,可以传递参数,但好像无法取得返回值。
      

  8.   

    问题可以这么解决:
    sprintf(strSQL,"{call UpdateSON('%s','%d','%s')}",m_Btl.ItemNo,error,itemno);
    参数都要用引号引起来,原来我也遇到这个问题
      

  9.   

    to breakfast(早餐) 兄:
    我定义了一个如下的存储过程:
    CREATE PROCEDURE UpdateSon(Pno in char,Eno out integer,Lno out char)
    我是这样调用的:
    char* strSQL = new char[150];
    int error = 0;
    char * itemno= new char[14];
    sprintf(strSQL,"{call UpdateSON('%s','%d','%s')}",m_Btl.ItemNo,error,itemno);
    TRY
       {
    m_Mxl.m_pframetempset.m_pDatabase->ExecuteSQL(strSQL);
       }
    CATCH(CDBException,e)//出错处理
      {
    AfxMessageBox(e->m_strError);
      }
    出现了:    PLA-00306:调用‘UPDATESON’时参数数量或类型错误
    这是怎么回事?我这些语名在哪些地方有问题?