That would depend on the circumstances. They both exist because they both have their uses. If you're talking about getting data from a database and then using it in an application then you might even use both. You could use ADO.NET to populate DataTables, whether in a DataSet or not, and then transfer the data to collections of your own entity types. That's exactly what ORMs do, e.g. Entity Framework. They use ADO.NET under the hood and expose the data to you as strongly-typed entities.