Хранимая процедура + ADO
От: vbb  
Дата: 01.05.04 07:15
Оценка:
Есть хранимая процедура —

CREATE   PROCEDURE sp_XXX ( @A int, @B int = 21 )
AS
    DECLARE @res int
    begin
      Set @res = @A + @B
    end
    
    return @res
GO


В Query Analyzer все работает замечательно — выдает сумму двух чисел
Но в следующей функции я все время получаю — 0, где ошибка — никак не
найду (


    ::CoInitialize(NULL);

    try 
    {
          _ConnectionPtr pConn("ADODB.Connection");
          _RecordsetPtr  pRs("ADODB.Recordset");
          _CommandPtr     pCmd("ADODB.Command");
      _ParameterPtr  pPr("ADODB.Parameter");

          pConn->Open("dsn=uchet;", "sa", "", adConnectUnspecified);

      pCmd->CommandType = adCmdStoredProc;
          pCmd->CommandText = "sp_XXX";

      int A = 9, B = 19, res = 0;
      VARIANT vt;
      
      memset(C, 0, 32);
      vt.vt = VT_I2;

      // Output
      pPr = pCmd->CreateParameter("ret", adInteger, adParamReturnValue, 4);
      pCmd->Parameters->Append(pPr);
      
      vt.iVal = A;
      pPr = pCmd->CreateParameter("A", adInteger, adParamInput, sizeof(int), vt);
      pCmd->Parameters->Append(pPr);
      pPr->Value = vt;
      vt.iVal = B;

      pPr = pCmd->CreateParameter("B", adInteger, adParamInput, sizeof(int), vt);
      pCmd->Parameters->Append(pPr);
      pPr->Value = vt;

          pCmd->ActiveConnection = pConn;
      pRs = pCmd->Execute(NULL,NULL,adCmdStoredProc);

      vt.iVal = (short)0;
      pPr = pCmd->Parameters->GetItem(&vt);
      if (pPr)
      {
          if ( (SHORT)pPr->Value > 0)
          {
            TRACE("Parameter name = '%s', value = '%d'\n", (LPCSTR)pPr->Name, (SHORT)pPr->Value);
          }
          else
          {
              int c = pConn->Errors->Count - 1;
              if (c > 0)
              {
                  VARIANT i;
                  i.vt = VT_I2; i.iVal = 0;

                  for (i.iVal = 0; i.iVal < c; i.iVal++ )
                  {
                      TRACE("ERROR: - %s\n", pConn->Errors->GetItem(i)->GetDescription());
                  }
              }
          }
      }
   }

   catch (_com_error &e)
   {
      dump_com_error(e);
   }

   CoUninitialize();



02.05.04 00:19: Перенесено модератором из 'C/C++' — ПК
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.