103 lines
2.2 KiB
C++
103 lines
2.2 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 1998, Microsoft Corp. All rights reserved.
|
|
//
|
|
// FILE
|
|
//
|
|
// cmdbase.cpp
|
|
//
|
|
// SYNOPSIS
|
|
//
|
|
// This file defines the class CommandBase.
|
|
//
|
|
// MODIFICATION HISTORY
|
|
//
|
|
// 02/20/1998 Original version.
|
|
// 02/15/1999 Make commands MT safe.
|
|
// 05/30/2000 Add trace support.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <ias.h>
|
|
#include <iasdb.h>
|
|
#include <cmdbase.h>
|
|
|
|
CommandBase::CommandBase() throw ()
|
|
{
|
|
dbParams.pData = NULL;
|
|
dbParams.cParamSets = 0;
|
|
dbParams.hAccessor = 0;
|
|
}
|
|
|
|
CommandBase::~CommandBase() throw ()
|
|
{
|
|
finalize();
|
|
}
|
|
|
|
void CommandBase::initialize(IUnknown* session)
|
|
{
|
|
setSession(session);
|
|
|
|
setCommandText(getCommandText());
|
|
|
|
setParamIO(createParamIO(command));
|
|
|
|
setParameterData(this);
|
|
}
|
|
|
|
void CommandBase::finalize() throw ()
|
|
{
|
|
releaseAccessor(dbParams.hAccessor);
|
|
|
|
command.Release();
|
|
}
|
|
|
|
void CommandBase::setCommandText(PCWSTR commandText)
|
|
{
|
|
CheckOleDBError(
|
|
"ICommandText::SetCommandText",
|
|
command->SetCommandText(DBGUID_DBSQL, commandText)
|
|
);
|
|
|
|
CComPtr<ICommandPrepare> prepare;
|
|
_com_util::CheckError(
|
|
command->QueryInterface(
|
|
__uuidof(ICommandPrepare),
|
|
(PVOID*)&prepare
|
|
)
|
|
);
|
|
|
|
CheckOleDBError(
|
|
"ICommandPrepare::Prepare",
|
|
prepare->Prepare(0)
|
|
);
|
|
}
|
|
|
|
void CommandBase::setSession(IUnknown* session)
|
|
{
|
|
CComPtr<IDBCreateCommand> creator;
|
|
_com_util::CheckError(
|
|
session->QueryInterface(
|
|
__uuidof(IDBCreateCommand),
|
|
(PVOID*)&creator
|
|
)
|
|
);
|
|
|
|
CheckOleDBError(
|
|
"IDBCreateCommand::CreateCommand",
|
|
creator->CreateCommand(
|
|
NULL,
|
|
__uuidof(ICommandText),
|
|
(IUnknown**)&command
|
|
)
|
|
);
|
|
}
|
|
|
|
void CheckOleDBError(PCSTR functionName, HRESULT errorCode)
|
|
{
|
|
if (FAILED(errorCode))
|
|
{
|
|
_com_issue_error(IASTraceJetError(functionName, errorCode));
|
|
}
|
|
}
|