I am having problems with executing a command object in ADO. The specific problem I have revolves around the proper type for the SQL string. Following examples on the internet, I established it with a _bstr_t. This though is not working with the * VARIANT type that is required in the Execute method. Can someone help me with the proper establishment of the SQL string? Listed below is the complete program:

Here is my error message coming out of the try block:

error C2664: 'ADODB::Command15::Execute' : cannot convert parameter 1 from '_bstr_t' to 'VARIANT *'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

#include <stdio.h>
#include <string>
using std::string;

int cyc = 0;

#import "c:\program files\common files\system\ado\msado15.dll" rename ("EOF","EOFile")
using namespace std;

struct StartOLEProcess{
    StartOLEProcess(  ) {
    ~StartOLEProcess(  ) {
        ::CoUninitialize(  );
} _start_StartOLEProcess;
void main(void)
	// define our variables which will be used as references to the
    // Connection and Recordset objects
    ADODB::_ConnectionPtr  con = NULL;
    ADODB::_RecordsetPtr   rec = NULL;
    ADODB::_CommandPtr	   com = NULL;
    ADODB::_ParameterPtr   par = NULL;
    // create two strings for use with the creation of a Connection
    // and a Recordset object
    bstr_t                 sConString;
    bstr_t                 sSQLString;
    // create a variable to hold the result to function calls
    HRESULT                hr                = S_OK;
    // long variable needed for Execute method of Connection object
    VARIANT                *vRecordsAffected = NULL;
    // create instance of an ADO Connection object, ADO Command object, ADO Parameter object, ADO Record object
    hr = con.CreateInstance(__uuidof(ADODB::Connection));
    hr = com.CreateInstance(__uuidof(ADODB::Command));
    hr = par.CreateInstance(__uuidof(ADODB::Parameter));
    hr = rec.CreateInstance(__uuidof(ADODB::Record));
    printf("Connection object created.\n");
    // open the data source with the Connection object
    sConString = L"Provider=Microsoft.Jet.OLEDB.4.0;" 
    L"Data Source=C:\\Users\\Mike Certini\\Documents\\Trading\\Databases\\TradingAnalysis#2.mdb";

    // open the connection.
    hr = con->Open(sConString, L"", L"", -1);
    printf("Connection has been opened.\n");

    // create and store SQL string for command string.
    _bstr_t strSQL("INSERT INTO mytable(id,desc)");

    // activate connection string.

    com->ActiveConnection = con;
    // establish command string parameters. 

    com->CommandText = strSQL;
    com->CommandType = ADODB::adCmdStoredProc;
    // Define Integer/variant.
    VARIANT vtInt;
    int intNum = 1;
    vtInt.vt = VT_I2;
    vtInt.iVal = intNum;

    // Define Character/variant.
    VARIANT vText; 
    vText.vt = VT_BSTR;
    vText.bstrVal = _bstr_t("This is text");

    // Complete parameter objects

    hr = com->Parameters->Append(com->CreateParameter(_bstr_t("id"),ADODB::adInteger,ADODB::adParamInput,4,intNum));
    hr = com->Parameters->Append(com->CreateParameter(_bstr_t("desc"),ADODB::adChar,ADODB::adParamInput,15,vText));

    // Execute command object

	rec = com->Execute(strSQL, NULL, ADODB::adCmdStoredProc);
	catch(_com_error &e)
	_bstr_t bstrSource(e.Source());
	_bstr_t bstrDescription(e.Description());

	// Print COM errors. 
	printf("\tCode = %08lx\n", e.Error());
	printf("\tCode meaning = %s\n", e.ErrorMessage());
	printf("\tSource = %s\n", (LPCSTR) bstrSource);
	printf("\tDescription = %s\n", (LPCSTR) bstrDescription);

    rec->Close(  );
    rec = NULL;

    printf("Closed an removed the "
           "Recordset object from memory.\n");

    // close and remove the Connection object from memory
    con->Close(  );
    con = NULL;
    printf("Closed and removed the "
		  "Connection object from memory.\n");