Inserte DataTable en Excel usando el motor de base de datos de Microsoft Access a través de OleDb

Encontré instrucciones hoy para leer datos de un archivo de Microsoft Excel usando unOleDbConnection en este sitio web:Proveedores OLE DB

Esto me permite leer todos los datos de un archivo de Excel:

private const string EXCEL_CON =
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};" +
  @"Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";

    public DataTable ExtractExcel(string fullFilename, string tableName)
    {
        var table = new DataTable();
        string strCon = string.Format(EXCEL_CON, fullFilename);
        using (var xlConn = new System.Data.OleDb.OleDbConnection(strCon))
        {
            ConnectionState initialState = xlConn.State;
            try
            {
                if ((initialState & ConnectionState.Open) != ConnectionState.Open)
                {
                    xlConn.Open();
                }
                string sql = string.Format("SELECT * FROM `{0}`;", tableName);
                using (var cmd = new System.Data.OleDb.OleDbCommand(sql, xlConn))
                {
                    table.Load(cmd.ExecuteReader());
                }
            }
            finally
            { // it seems like Access does not always close the connection
                if ((initialState & ConnectionState.Open) != ConnectionState.Open)
                {
                    xlConn.Close();
                }
            }
        }
        return table;
    }

Cuando inserto datos, el Paso 1 es eliminar la tabla existente en la base de datos de Microsoft Access en caso de que se hayan agregado, cambiado o eliminado columnas:

public void InsertExcel(OleDbConnection dbConn, DataTable table) {
  ConnectionState initState = dbConn.State;
  try {
    if ((initState & ConnectionState.Open) != ConnectionState.Open) {
      dbConn.Open();
    }
    string sql = string.Format("SELECT * FROM {0};", table.TableName);
    DataTable original = new DataTable();
    using (OleDbCommand cmd = new OleDbCommand(sql, dbConn)) {
      try {
        original.Load(cmd.ExecuteReader());
      } catch (Exception) { // table does not exist
      }
    }
    if (0 < original.Rows.Count) {
      sql = string.Format("DROP TABLE {0};", table.TableName);
      using (OleDbCommand cmd = new OleDbCommand(sql, dbConn)) {
        cmd.ExecuteNonQuery();
      }
    }
    // ****************
    // CODE NEEDED HERE
    // ****************
  } finally {
    if ((initState & ConnectionState.Open) != ConnectionState.Open) {
      dbConn.Close();
    }
  }
}

Después de laDROP TABLE comando se ejecuta (en elCODE NEEDED HERE sección), necesito insertar de alguna manera la información en elTabla de datos.

¿Cómo insertaría la tabla si no tengo ningún tipo de clave principal, nombre de columna o tipo de datos de columna?

losOleDbParameter tiene elAddWithValue Método que permite agregar datos sin tener que conocer el tipo de datos.¿Hay algo similar que podría usar para volcar en todo elDataTable (oDataSet)?

Respuestas a la pregunta(1)

Su respuesta a la pregunta