Il CommandBuilder è un oggetto che se fosse più flessibile avrebbe sicuramente attratto maggiormente gli sviluppatori, una sua pessima abitudine è quella di invalidare le modifiche fatte ai comandi da lui generati.
Per maggior info si veda il seguente:
PRB: CommandBuilder Changes Modified Commands Back to Original
Un modo per aggirare il problema può essere quello di clonare il comando generato ed aggiungere la modifica necessaria.
Esempio:
da.InsertCommand = DirectCast(DirectCast(da.InsertCommand, System.ICloneable).Clone, _
System.Data.IDbCommand)
da.InsertCommand.CommandText &= "; SELECT SCOPE_IDENTITY() AS ID"
da.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord