Hola grupo, saludos a todos.
Estoy intentando realizar mi primer programa en serio con el vb.net, he
contruido un formulario para acceder a la tabla de clientes de una base de
datos llamada GESTION. Os explico un poco como lo estoy haciendo y despues
os muestro mi problema:
Tengo el siguiente codigo en el evento Load:
strConn = "Server=(Local);DataBase=GESTION;Integrated Security=SSPI"
Dim CNN As New SqlConnection(strConn)
Dim strSQL As String = "SELECT * FROM Customers"
Dim scmd As New SqlCommand(strSQL, CNN)
sda = New SqlDataAdapter(scmd)
Dim scb As New SqlCommandBuilder(sda)
sda.InsertCommand = scb.GetInsertCommand()
sda.UpdateCommand = scb.GetUpdateCommand()
sda.DeleteCommand = scb.GetDeleteCommand()
dsPrincipal = New DataSet()
sda.Fill(dsPrincipal, "Customers")
dtPrincipal = dsPrincipal.Tables(0)
txtID.DataBindings.Add("Text", dtPrincipal, "ID")
txtApellidos.DataBindings.Add("Text", dtPrincipal, "Apellidos")
txtNombre.DataBindings.Add("Text", dtPrincipal, "Nombre")
Para moverme por los registros utilizo botones con el codigos:
Me.BindingContext(dtPrincipal).Position -= 1
ó
Me.BindingContext(dtPrincipal).Position += 1
Para actualizar:
Me.BindingContext(dtPrincipal).EndCurrentEdit()
sda.Update(dtPrincipal)
Para Cancelar:
Me.BindingContext(dtPrincipal).CancelCurrentEdit()
sda.Update(dtPrincipal)
Y todo hasta aqui bien, modifico los textbox y cuando ejecuto el boton
actualizar o cancelar me funciona perfectamente.
En cambio para crear un nuevo registro utilizo lo siguiente:
Me.BindingContext(dtPrincipal).AddNew()
se me limpian los textbox y tecleo los nuevos datos completos. Al pulsar el
boton de actualizar con el codigo que hemos visto antes me salta una
excepcion indicandome que el campo ID es obligatorio y no puede contener
null, borrandome el que yo habia tecleado.
Alguien me puede decir que estoy haciendo mal, y si existe una forma mejor
de hacer los que estoy haciendo, que no sea con el asistente para acceso a
datos, por favor que me lo diga.
Otra pregunta, ¿Para que sirven las siguientes lineas, ya que si las quito
tambien funciona?, ¿Son necesarias?
Dim scb As New SqlCommandBuilder(sda)
sda.InsertCommand = scb.GetInsertCommand()
sda.UpdateCommand = scb.GetUpdateCommand()
sda.DeleteCommand = scb.GetDeleteCommand()
Tambien me gustaria saber que debo ejecutar cuando cierre el formulario y
cerrar todos las conexiones abiertas, dataadapter, dataset, datatable, ...
Como siempre, muchisimas gracias de antemano.
Saludos
Leer las respuestas