Pues, yo te recomendaría que creases clases para poder gestionar sin problema los datos, realmente los dataset no son muy convenientes cuando tus proyectos cambian a cada rato, no es que se te arruinen, sino que cada vez que haces un cambio a una tabla, ya sea el tipo de dato, longitud, nombre del campo, etc. estos no se generan en el dataset ya que el dataset no es una estructura dinámica, por lo general te tocara hacerlo de forma manual, o como tu dices regenerar el dataset, esto es problemático si ya tienes desarrolladas algunas funciones o procedimientos especiales.
Yo lo que hago es que creo una clase que represente de la mejor manera al objeto, procedimiento, etc.
Por ejemplo:
Public Class MiObjeto
'' Defino los eventos que pueden ser utiles para dicho objeto
Public Event Validating(sender as MiObjeto, e As CancelEventArgs)
Public Event OnDeleting(sender as MiObjeto, e As CancelEventArgs)
'' Defino las propiedades de dicha clase ó defino una variable
Public privar as integer = 0
Public segvar as string = String.Empty
'' Defino los metodos que estaran permitidos para dicho objeto
Public Function Insert() as Boolean
End Function
Public Function Delete() as Boolean
'' Si hemos definido un evento ante la llamada a una función disparamos el evento según sea el caso y función de dicho evento
Dim cancel As New CancelEventArg (False)
RaiseEvent OnDeleting(me, cancel)
If cancel = True Then Exit Sub
'' Si tengo una clase definida para para la eliminación (modelo MVC)
ManagerMiObjeto.Delete(me)
'' Si no estoy usando el model MVC, pues utiliza las instrucciones necesarias para ejecutar la sentencia llamando al procedimiento que
'' has creado para administrar dichas peticiones.
End sub
End Class
Ahora bien, como ya tenemos nuestro objeto definido, con sus métodos y eventos pues simplemente basta con crear una instancia, recoger la información y invocar todos los métodos necesarios según convenga o según tu lógica de desarrollo.
Por ejemplo:
'' Si lo tengo declarado a nivel de formulario, modulo o clase (dependera como estes declarandolo)
Private mObjeto As MiObjeto = New MiObjecto()
Public Sub cmDeleteMiObjecto(sender as Object, e ...) handler cmDelete.Click
mObjeto.Delete()
End Sub
Es un poco mas tardado, pero como tu sabes cual es la logica, estructura y diseño, pues no se te hara dificil modificarlo segun lo necesites, es una manera, no puedo decir si la mejor, pero es a mi ver algo mejor que utilizar datasets