We generally use datasets. If you create a dataset that uses a single table, the dataset will automatically generate methods for SELECT, UPDATE, INSERT and DELETE. If you create a dataset on a query, or on multiple tables using joins, the resulting dataset only has the SELECT method generated. Using a correlated subquery allows you to retrieve a lookup value, but the dataset will still contain all 4 methods.
Let me give an example. If I create a dataset and use the following query;
where Company.CompanyID = MyValues.CompanyID
Then the dataset will only contain a single method for SELECT. Any updating, deleting or inserting will need to be coded manually. However, iIf I create the dataset using a correlated subquery, such as the following;
(select CompanyName from Company
where Company.CompanyID = MyValues.CompanyID) as CompanyName
The dataset will contain the same resulting values, but will still include all methods. It's an anomaly of VS datasets, but well documented.