Fail to execute SQL command asynchronously
You need create a separate pCmdChange object for each INSERT:

for (UINT uIndex = 0; uIndex &lt; 3000000, uIndex ++)
{
     // Create command object.
     pCmdChange.CreateInstance(__uuidof(Command));
     pCmdChange-&gt;ActiveConnection = pConnection;
     pCmdChange-&gt;CommandText = strSQLChange;

     pCmdChange-&gt;Execute(NULL, NULL, adCmdText | adAsyncExecute | adExecuteNoRecords);
}


Keep in mind that your server probably won't like 3,000,000 near-concurrenct commands. You may run into SQL server dead-locks and or other connectivity issues.