正确重用ADODB命令对象以执行多个查询

时间:2014-02-04 04:47:01

标签: c++ ado

我必须执行多个INSERT个查询,我希望重用一个Command对象,而不是为我的每个查询创建一个新对象。

为了更好地说明这一点,这里有一个伪代码:

ADODB::_CommandPtr pCmd("ADODB.Command");

pCmd->ActiveConnection = pConn;

pCmd->CommandText = L"INSERT INTO MyTable ( field1, field2 ) VALUES (?,?);";

pCmd->Parameters->Append( pCmd->CreateParameter( "?", ADODB::adVarWChar,
    ADODB::adParamInput, wcslen( myString ), myString ) );

pCmd->Parameters->Append( pCmd->CreateParameter( "?", ADODB::adDouble,
    ADODB::adParamInput, sizeof(double), 
    _wtof_l( myDouble, _get_current_locale() ) ) );

pCmd->Execute( NULL, NULL, ADODB::adCmdText );

// empty parameters collection->the problematic part

/**** execute second query **************/

pCmd->CommandText = //some other query

// and do basically the same as above:
// append some parameters and execute query

我不知道如何从Parameters集合中删除所有参数,因此我可以将Command对象重新用于另一个SQL查询。

缺乏经验,我尝试在互联网上找到解决方案,并找到了一些如何做的建议。以下是我的尝试:

do
{
    pCmd->Parameters->Delete(0);
}
while( pCmd->Parameters->GetCount() > 0 );

但失败了。我也试过这个:

for( long i = 0; i < pCmd->Parameters->GetCount(); i++ )
    pCmd->Parameters->Delete(i);

但也失败了。

如何正确清空Parameters集合,以便重用Command对象?

谢谢。

最好的问候。

1 个答案:

答案 0 :(得分:3)

更好地看待来自互联网的样本,我设法解决了这个问题。重点是从头到尾删除参数 ,如下所示:

for( long i = pCmd->Parameters->GetCount()-1; i >= 0; i-- ) 
    pCmd->Parameters->Delete(i);

或者像这样:

do
{ 
    pCmd->Parameters->Delete( pCmd->Parameters->GetCount()-1 ); 
}
while( pCmd->Parameters->GetCount()-1 >= 0 );

我仍然会遵循 WhozCraig 成员提供的建议,并为每个查询创建新的Command对象。

再次感谢 WhozCraig 和最好的问候直到下次!