Για να κάνεις κάτι τέτοιο, θα πρέπει εκεί που γράφεις το query, να πατήσεις από κάτω το κουμπί που λέει “Advanced Options” και κατόπιν, να βάλεις check στην επιλογή “Refresh the data table”. Έτσι, όταν θα καθορίσει τα Insert και Update statements που αντιστοιχούν στο InsertCommand και UpdateCommand, θα τους κάνει append ένα select ώστε να πάρεις πίσω όλα τα πεδία και να διαβάσεις τις τιμές που έχουν προέλθει από identity columns και default values. Δηλαδή αν το query σου είναι
SELECT CustomerID, Company, Email, Phone
FROM Customers
αν ενεργοποιήσεις το Refresh the data table, αυτός θα παράγει τα εξής Insert και Update:
INSERT INTO [Customers] ([Company], [Email], [Phone]) VALUES (@Company, @Email, @Phone);
SELECT CustomerID, Company, Email, Phone FROM Customers WHERE (CustomerID = SCOPE_IDENTITY())
και
UPDATE [Customers] SET [Company] = @Company, [Email] = @Email, [Phone] = @Phone WHERE (([CustomerID] = @Original_CustomerID));
SELECT CustomerID, Company, Email, Phone FROM Customers WHERE (CustomerID = @CustomerID)
Μάλιστα, εδώ υπάρχει και μια βελτίωση στο ADO.NET 2.0. Στην προγούμενη έκδοση, ο generated κώδικας αντί για το SCOPE_IDENTITY() χρησιμοποιούσε το @@IDENTITY το οποίο δίνει λάθος τιμή σε περίπτωση που υπάρχει trigger που κάνει insert σε πίνακα με identity column. Το guideline ήταν λοιπόν, πάντοτε να αλλάζουμε κατόπιν τον κώδικα χειροκίνητα για να αποφύγουμε την περίπτωση που κάποιος θα πάει να βάλει ένα trigger στον πίνακά μας χωρίς να το ξέρουμε.
Vir prudens non contra ventum mingit