SQL Create Table using ADO results in abnormal termination

This code works for SQL Server.
When I attempt to create a dBASE table
using BDE's local SQL syntax, the program abends.
Is my local SQL syntax correct? What is going
wrong here?

#include "stdafx.h"                   //
#include <stdio.h>          //   M:\TestADO\TestADO.cpp           2003\06\21  
2:51 Pm
                                                        //
#import "C:\Program Files\Common Files\System\ado\MSADO15.dll"
rename("EOF", "EOFile")

struct StartOLEProcess {
   StartOLEProcess() {
     ::CoInitialize(NULL);
     }
   ~StartOLEProcess() {
     ::CoUninitialize();
     }

Quote
} _start_startOLEProcess;

void main(void)
{    
  ADODB::_ConnectionPtr con = NULL;
//  ADODB::_RecordsetPtr  rec = NULL;
  ADODB::FieldPtr       pAuthor;
  _variant_t            vAuthor;
  char                  sAuthor[40];
  bstr_t                sConString;
  bstr_t                sSQLString;
  HRESULT               hr = S_OK;
  VARIANT               *vRecordsAffected = NULL;
  hr = con.CreateInstance(__uuidof(ADODB::Connection));
  printf("Connection object created.\n");

//sConString = L"Provider=SQLoledb;data source=(local);initial
catalog=pubs;"
//            L"User ID=sa; Password=;";

//sConString =L"DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=authors.MDB;DefaultDir=C:\\Simple";
//sConString =L"DRIVER={Microsoft Access Driver
(*.mdb)};DefaultDir=C:\\Simple";

  sConString =L"Driver={Microsoft dBASE Driver
(*.dbf)};DriverID=277;Dbq=c:\\Simple";

  con->Open(sConString, L"", L"", -1);
  printf("Connection opened.\n");

//sSQLString = L"SELECT * FROM Authors;";
//sSQLString = L"SELECT TOP 10 au_lname FROM Authors;";
//sSQLString = L"CREATE TABLE NewTable.dbf ( NAME CHAR (30) )";

//sSQLString = L"INSERT INTO Authors ( au_id ) VALUES ( 111 )";

//  Does Not Crash SQL Server
//  sSQLString = L"CREATE TABLE JOHN (Year INT NOT NULL, Make CHAR(12)
NOT NULL, Cost INT);";
  sSQLString = L"CREATE TABLE \"HARRY.dbf\" (Year NUMERIC(4,0), Make
CHAR(12), Cost NUMERIC(9,2));";

//rec = con->Execute(sSQLString, vRecordsAffected, 1);  
  con->Execute(sSQLString, vRecordsAffected, 1);

  printf("SQL statement processed.\n");
/******************
  pAuthor = rec->Fields->GetItem("au_lname");
  printf("Getting Data Now...\n\n");
  while(!rec->EOFile) {
    vAuthor.Clear();
    vAuthor = pAuthor->Value;
    WideCharToMultiByte(CP_ACP, 0, vAuthor.bstrVal, -1, sAuthor,
                        sizeof(sAuthor), NULL, NULL);
    printf("%s\n", sAuthor);
    rec->MoveNext();
  }
  rec->Close();
  rec = NULL;
*******************/
  printf("Closed and Removed the Connection Object from memory.\n");

Quote
}