我必须执行多个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
对象?
谢谢。
最好的问候。
答案 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 和最好的问候直到下次!