Escrevendo para excel usando o OleDb

Eu estou tentando exportar linhas de dados de sql para excel, mas meu comando de inserção parece falhar toda vez. Eu passei um bom tempo tentando criar isso, mas finalmente encontrei a parede.

O documento excel é aquele que é gerado pelo IRS e não estamos em voz alta para modificar nada acima da linha 16. A linha 16 é a linha do cabeçalho, e tudo abaixo disso precisa ser os dados do sql. Todos os nomes dos cabeçalhos têm espaços, e parece que estou em dificuldades.

A partir da linha 16, os nomes das colunas são: Nome do Participante, Sobrenome do Participante, PTIN do Participante, Número do Programa, Programa Concedido por Horário da CE, Data de Conclusão

É assim que eu estou tentando escrever para o excel

private void GenerateReport()
{
    FileInfo xlsFileInfo = new FileInfo(Server.MapPath(CE_REPORTS_PATH + CE_PTIN_TEMPLATE + EXTENSION));

    string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes'", xlsFileInfo.FullName);

    //create connection
    OleDbConnection oleDBConnection = new OleDbConnection(connectionString);
    oleDBConnection.Open();

    //create the adapter with the select to get 
    OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$A16:F16]", oleDBConnection);

    // Create the dataset and fill it by using the adapter.
    DataTable dataTable = new DataTable();
    adapter.FillSchema(dataTable, SchemaType.Source);
    adapter.Fill(dataTable);

    string[] colNames = new string[dataTable.Columns.Count];
    string[] colParms = new string[dataTable.Columns.Count];

    for (int i = 0; i < dataTable.Columns.Count; i++)
    {
        colNames[i] = String.Format("[{0}]", dataTable.Columns[i].ColumnName);
        colParms[i] = "?";
    }

    // Create Insert Command
    adapter.InsertCommand = new OleDbCommand(String.Format("INSERT INTO [Sheet1$] ({0}) values ({1})", string.Join(",", colNames), string.Join(",", colParms)), oleDBConnection);

    // Create Paramaters
    for (int i = 0; i < dataTable.Columns.Count; i++)
    {
        OleDbParameter param = new OleDbParameter(String.Format("@[{0}]", dataTable.Columns[i].ColumnName), OleDbType.Char, 255, dataTable.Columns[i].ColumnName);
        adapter.InsertCommand.Parameters.Add(param);
    }

    // create a new row
    DataRow newCERecord = dataTable.NewRow();

    // populate row with test data
    for (int i = 0; i < dataTable.Columns.Count; i++)
    {
        newCERecord[i] = "new Data";
    }
    dataTable.Rows.Add(newCERecord);

    // Call update on the adapter to save all the changes to the dataset
    adapter.Update(dataTable);

    oleDBConnection.Close();     
}

O erro que recebo acontece quando adapter.Update (dataTable) é chamado e é como segue

$exception  {"The INSERT INTO statement contains the following unknown field name: 'Attendee First Name'. Make sure you have typed the name correctly, and try the operation again."}   System.Exception {System.Data.OleDb.OleDbException}

Isso é frustrante porque eu puxo cada campo diretamente do nome da coluna como obtido por colNames [i] = String.Format ("[{0}]", dataTable.Columns [i] .ColumnName). Eu descobri que precisava do [] para explicar os espaços nos nomes das colunas, mas neste momento não tenho certeza qual é o problema. Quando eu olho para o arquivo excel tudo parece correto para mim.

questionAnswers(2)

yourAnswerToTheQuestion