The command.ExecuteNonQuery makes each insert individually, the dataAdapter update runs it in a batch, much less initialization data for each insert.
Are you using Sql Server? If so, the bulk copy program is probably the fastest way...http://dotnetjunkies.com/WebLog/stefandemetz/archive/2004/08/19/22566.aspx
otherwise, how about creating a stored procedure for the insert and assigning that as the insertcommand for the dataAdapter. Also, use a counter variable to add the objects to the dataTable, as using the foreach statement retrieves the enumeration property each time.