To use or not to use Table Adapters/Typed Datasets
When ASP.NET 2.0 came out, it featured Table Adapters, which is the new way to replace typed datasets and connections. This approach is cleaner, but works in a very similar way to typed datasets. Furthermore, table adapters have a nice interface when adding queries and seeing the structure/relations of the data.
But is it worth using as part of the architecture? It is a very handy feature; simply add a new query with some additional constraints, and you have a variation that is helpful. In addition, you can have as many queries as you would like; you can also create a scalar query, or an insert/update/delete operation as well.
However, one of the drawbacks is that the query has to support all of the fields defined in the initial setup, or there could be potential problems. To circumvent that, setting a field to allow nulls will not cause problems if the query doesn't return any results. But, queries can become complex that multiple table adapters, which represent the same overall data, are returned. For instance, a table adapter may be added to add additional calculated fields, or it may be added to allow an inner join with another table.
In addition, a single data set file, which is the .xsd that holds the table adapter structures and queries, do not typically hold all the data. A project may contain multiple data sets, and because of that, a table may be duplicated throughout. Just because its the same table doesn't mean the type is the same; rather, the data set name is the namespace, which means that each table object is within that namespace and separate from each other. Because some code may work with the same object in different namespaces, this needs to be handled in some way.
Although, you can't beat the convenience that they bring; right-click, enter the query and the where clause, click Finish, and you got yourself a new query. It's not quite as simple with Data Access code, though tools like CodeSmith do simplify the overall process.
In my conclusion, typed datasets and table adapters both have their advantages, but they have to fit within the architecture and application style. And, it has to be evaluated with the scope. It's also harder to unit test applications, as object models are better in this respect.