There is a fairly large set of differences between these two technologies that cannot be really covered in a short SO post, but I'll try to cover the highlights
- In Linq2Sql you write your queries over in memory objects. Under the hood though the code you write is translated to expression trees and is further translated to SQL at runtime where the query is actually run. In ADO.Net you directly build SQL queries which are run against the server.
- Linq2Sql has direct language support in C# and VB.Net. ADO.Net provides support for string based query which have 0 language support other than just a raw string.
- The language support in Linq2Sql makes queries type safe. In ADO.Net all query results must be converted to the appropriate type which essentially removes type safety checks.