End Google Ads 201810 - BS.net 01 --> Hi all, the code below works fine except for the retrieval of the @Count parameter which is of type *output* it always returns zero - any ideas ? ( it's this line of code : _tprintf(_T("Records found = %d\n\n"),spCmd->Parameters["@Count"]);

Many thanks



#pragma region Includes and Imports
#include "stdafx.h"

#include

#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF","EndOfFile")
using namespace ADODB;
#pragma endregion

static ADODB::_ParameterPtr CreateParam(_bstr_t Name, _bstr_t Value, int Size, ADODB::DataTypeEnum Type, ADODB::ParameterDirectionEnum Direction);
static ADODB::_ParameterPtr CreateParam(_bstr_t Name, int Value, int Size, ADODB::DataTypeEnum Type, ADODB::ParameterDirectionEnum Direction);

int _tmain(int argc, _TCHAR* argv[])
{
if (argc < 4)
{
_tprintf(_T("Usage: CppUseADO.exe \"Search for this\" Y|N to specify combined or not Y|N to include address search\n"));
return -1;
}

int i = 0;
::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

ADODB::_ConnectionPtr spConn = NULL;
ADODB::_RecordsetPtr spRst = NULL;
ADODB::_CommandPtr spCmd = NULL;
ADODB::_ParameterPtr spParam = NULL;

_bstr_t bstrSearchExp(argv[1]);
_bstr_t bstrCombined(argv[2]);
_bstr_t bstrSearchAddress(argv[3]);

_bstr_t bstrConn("dsn=CMS;");


try
{

spConn.CreateInstance(__uuidof(ADODB::Connection));
_tprintf(_T("Connecting to the database ...\n"));
spConn->Open(bstrConn, "", "", NULL);


spCmd.CreateInstance(__uuidof(ADODB::Command));

spCmd->ActiveConnection = spConn;
spCmd->CommandText = "SearchOnCreditorName";
spCmd->CommandType = ADODB::adCmdStoredProc;

spRst.CreateInstance(__uuidof(ADODB::Recordset));

spParam = CreateParam("@PartWord", bstrSearchExp, 35, ADODB::adVarChar, ADODB::ParameterDirectionEnum::adParamInput);
spCmd->Parameters->Append(spParam);

spParam = CreateParam("@Combined", bstrCombined, 1, ADODB::adChar, ADODB::ParameterDirectionEnum::adParamInput);
spCmd->Parameters->Append(spParam);

spParam = CreateParam("@SearchAddress", bstrSearchAddress, 1, ADODB::adChar, ADODB::ParameterDirectionEnum::adParamInput);
spCmd->Parameters->Append(spParam);

spParam = CreateParam("@Count", 0, 8, ADODB::adInteger, ADODB::ParameterDirectionEnum::adParamReturnValue);
spCmd->Parameters->Append(spParam);

_tprintf(_T("Searching the CMS Database for value %s \n"), (PCTSTR)bstrSearchExp);
spCmd->Prepared = true;

spRst = spCmd->Execute(NULL, NULL, NULL);


_tprintf(_T("Records found = %d\n\n"),spCmd->Parameters["@Count"]);


while (!spRst->EndOfFile)
{
variant_t vtClaimRef(spRst->Fields->Item["ClaimRef"]->Value);
variant_t vtCreditorName(spRst->Fields->Item["CreditorName"]->Value);
variant_t vtAddr1(spRst->Fields->Item["AddrLine1"]->Value);
variant_t vtAddr2(spRst->Fields->Item["AddrLine2"]->Value);
variant_t vtAddr3(spRst->Fields->Item["AddrLine3"]->Value);

_tprintf(_T("%s\t %s\t %s %s %s\n"),
vtClaimRef.vt == VT_NULL ? _T("(DBNull)") : (PCTSTR)vtClaimRef.bstrVal,
vtCreditorName.vt == VT_NULL ? _T("(DBNull)") : (PCTSTR)vtCreditorName.bstrVal,
vtAddr1.vt == VT_NULL ? _T("(DBNull)") : (PCTSTR)vtAddr1.bstrVal,
vtAddr2.vt == VT_NULL ? _T("(DBNull)") : (PCTSTR)vtAddr2.bstrVal,
vtAddr3.vt == VT_NULL ? _T("(DBNull)") : (PCTSTR)vtAddr3.bstrVal);

i++;
spRst->MoveNext(); // Move to the next record
}


_tprintf(_T("%d records printed for %s\n"), i, (PCTSTR)bstrSearchExp);


}
catch (_com_error err)
{
_tprintf(_T("\nOops something went wrong ! probably no records found\n"));
_tprintf(err.Description());
_tprintf(err.ErrorMessage());
_tprintf(_T("\n\n"));
}


/////////////////////////////////////////////////////////////////////////
// Clean up objects before exit.
//

_tprintf(_T("Closing the connection...\n"));

// Close the record set if it is open
if (spRst && spRst->State == ADODB::adStateOpen)
spRst->Close();

// Close the connection to the database if it is open
if (spConn && spConn->State == ADODB::adStateOpen)
spConn->Close();

::CoUninitialize();
return 0;
}


static ADODB::_ParameterPtr CreateParam(_bstr_t Name, _bstr_t Value, int Size, ADODB::DataTypeEnum Type, ADODB::ParameterDirectionEnum Direction)
{
ADODB::_ParameterPtr spParam;
spParam.CreateInstance(__uuidof(ADODB::Parameter));
spParam->Direction = Direction;
spParam->Name = Name;
spParam->Type = Type;
spParam->Size = Size;
spParam->Value = Value;
return spParam;
}

static ADODB::_ParameterPtr CreateParam(_bstr_t Name, int Value, int Size, ADODB::DataTypeEnum Type, ADODB::ParameterDirectionEnum Direction)
{
ADODB::_ParameterPtr spParam;
spParam.CreateInstance(__uuidof(ADODB::Parameter));
spParam->Direction = Direction;
spParam->Name = Name;
spParam->Type = Type;
spParam->Size = Size;
spParam->Value = Value;
return spParam;
}
We can’t stop here, this is bat country - Hunter S Thompson RIP