Escribiendo para sobresalir usando OleDb

Estoy intentando exportar filas de datos de SQL a Excel, pero mi comando de inserción parece fallar siempre. He pasado mucho tiempo tratando de crear esto, pero finalmente me he topado con la pared.

El documento de Excel es uno generado por el IRS y no estamos autorizados a modificar nada por encima de la fila 16. La fila 16 es la fila del encabezado, y todo lo que está debajo debe ser la información de sql. Todos los nombres de encabezados tienen espacios en ellos, y parece que es donde me estoy metiendo en problemas.

A partir de la fila 16, los nombres de las columnas son: Nombre del asistente, Apellido del asistente, PTIN del asistente, Número de programa, Horas otorgadas CE Programa, Fecha de finalización

Así es como intento escribir para sobresalir.

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();     
}

El error que recibo sucede cuando se llama a adapter.Update (dataTable) y es como sigue

$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}

Esto es frustrante porque extraigo cada campo directamente del nombre de la columna tal como lo obtienen los nombres de columna [i] = String.Format ("[{0}]", dataTable.Columns [i] .ColumnName). Descubrí que necesitaba [] para tener en cuenta los espacios en los nombres de columna, pero en este momento no estoy seguro de cuál es el problema. Cuando miro el archivo de Excel, todo me parece correcto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta