Foros del Web » Programación para mayores de 30 ;) » .NET »

Dudas sobre programación en Capas VB.NET

Estas en el tema de Dudas sobre programación en Capas VB.NET en el foro de .NET en Foros del Web. Hola Buenos días !!! Bueno, vereis, estoy empezando a desarrollar una aplicación en 3 capas, para practicar y todo eso, y me han surgido unas ...
  #1 (permalink)  
Antiguo 15/03/2005, 03:39
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Dudas sobre programación en Capas VB.NET

Hola Buenos días !!!

Bueno, vereis, estoy empezando a desarrollar una aplicación en 3 capas, para practicar y todo eso, y me han surgido unas cuantas dudas teóricas que me han hecho darme cuenta de que me falta mucho por aprender. :(

Una de ellas es la siguiente:

1-. Estoy haciendo una Clase llamada AccesoBD qeu es la que se encargará de llenarme el DataSet, de escribirme en el mismo, y demás cosas.

Pues bien, tengo un método qeu es el siguiente:

public sub LlenarDataSet(ByRef DS as DataSet, ByVal Tabla as String, ByVal Sentencia as String)
'Indico el DataSet, la DataTable, y la sentencia que quiero usar para rellenar el DataTable del Dataset.
....
....
End Sub

Bien, todavía no me funciona, pero bueno, ya lo miraré, hasta aqui, bien, pero ahora la duda me surge de lo siguiente. ¿Como podría hacer el método para escribir en el DataSet?

Yo antes hacía lo siguiente:
Dim CmdBD as SqlCommandBuilder
Dim DA as SqlDataAdapter = new SqlDataAdapter("sentencia", CN)
DA.Fill(DataSet, "TablaDelDataSet")
CmdBD = new SqlCommandBuilder(DA)

Y claro, esto me funciona de vicio, pero necesito un DataAdapter, por cada tabla del DataSet que vaya a modificar. Y naturalmente, en la clase, no voy a crear un DataAdapter por cada Tabla del DataSet, ya que sino, para eso lo hago sin Capas.

Pense en hacer lo siguiente, por ejemplo, para añadir un registro, pues primero pasaría los datos del campo a añadir, haría un DataRow añadiria los datos al DataSet y despues, mediante un procedimiento almacenado insertaría los datos. Pero claro, de aqui me surgen varias dudas:

Ya no estoy aprovechando la función que tiene el DataSet, de nada más que modifique sus datos, automaticamente actualize el la Base de Datos ( DataAdapter.Update(DS) ). Entonces estaría haciendo de forma no optima ¿Verdad?

Si lo ven correcto esta forma de realizar la operación, ¿Como podría pasarle los camops a insertar?, por que claro, dependiendo de que Tabla vaya a modificar, serán X campos.









2-. Bueno, eso era una pregunta, jejejeje, pero todavía tengo otra. Yo tengo pensado trabajar casi siempre con DataSets, creo qeu está muy bien, eso de no tener que estar siempre conectado. Sin embargo, Si utilizo DataSets en mis aplicaciones rara vez podré usar ProcedimientosAlamcenados, ¿Verdad?

Esto lo digo, por que, claro, si yo ejecuto un procedimiento almacenado, por ejemplo, de insertar, mi SqlServer me lo insertar en la BD, vale muy bien, pero despues de haber ejecutado el Command, tendré que ejecutar otro procedimiento para actualizar mi DataSet.

Entonces, ya estoy haciendo dos pasos, insertar y actualizar el DataSet, para eso, inserto directamente con el DataSet y me ahorro un paso. ¿No?



En fin, estas son un par de dudillas, tengo más, que procuraré solucionarlas por mi cuenta, no las pongo pa no agobiar y asi haber si tengo suerte y pueden contestarme a estas dos dudas, por que acabo de darme cuenta de que me falta mucho por aprender, y la verdad, jode mucho.


De todas formas, muchas gracias.
__________________
Charlie.
  #2 (permalink)  
Antiguo 15/03/2005, 08:19
Avatar de HenrydeSousa  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 300
Antigüedad: 19 años, 7 meses
Puntos: 2
a ver, no necesitas un dataadapter por cada tabla del dataset, de hecho ya tienes un
metodo que recibe en uno de sus parametros la tabla cierto?. Bueno utiliza esos parametros
para que por medio de tu adaptador puedas llenar la tabla del dataset que quieras.

claro que puedes utilizar datasets en tus aplicaciones y tener stored procedures.
Tampoco necesitas dos procedimientos para insertar en la bd y para actualizar tu
dataset. De hecho los valores que le mandas a tu stored procedure van a ser los
que tiene ya cargados el dataset por lo que no tienes que actualizarlo.

No has ojeado la aplicación de ejemplo pachacamac? creo que trata sobre las capas y eso. Saludos...
Cualquier cosa vuelve a preguntar...
  #3 (permalink)  
Antiguo 15/03/2005, 14:13
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Ahá, gracias.

Bueno, actualmente he hecho este método dentro de mi clase, para escribir datos, pero no me funciona:

Public Function InsertarDatosDataSet(ByRef DataS as DataSet, ByVal TablaDs as String, ByVal Sentencia as String) as Boolean

Dim DA as SqlDataAdapter = new SqlDataAdapter()
DA.InsertCommand.CommandText = Sentencia
DA.InsertCommand.Connection = Me.CN

DA.Update(DataS, TablaDs)
DataS.AcceptChanges()
End Function

Bien, lo que quiero es, que através de esta función en mi Clase, pueda actualizar cualquier DataSet con su Tabla y a la vez la BD. Creo que lo estoy haciendo bien, pero el error me llega en el "DA.InsertCommand.CommandText = Sentencia", y me dice que estoy haciendo referencia no establecida a la instancia de un objeto, cuando como se ve en el código, ya he instanciado mi SqlDataAdapter.

Para llamar a esta funcion hago algo como esto:

Dim MyCN as new AccesoBD("mi cadena cn") 'Creo mi objeto.
Dim DS as new DataSet
MyCN.LlenarDataSet(DS, "TablaDataSet", "select * from ...")
'Hasta aqui funciona, me llena los datos con el select y todo eso.


'Ahora voy a insertar un dato
MyCN.InsertarDatosDataSet(DS, "TablaDataSet", "insert into ...")

Y al ejecutar esta sentencia me falla y me pone el error antes comentado. ¿Qué tengo mal?, ¿Como podría hacer para que esta funcion, ya me actualice directamente el DataSet y de paso me inserte en la BD?

En fin, espero puedan hecharme un cable.

Desde ya, thanks.
__________________
Charlie.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:13.