Sei sulla pagina 1di 4

CONEXIN VB NET SQL SERVER

Enlace de datos en tiempo de ejecucin


Crear un formulario tal y como se muestra en la siguiente imagen. La forma ms fcil de crear un enlace con un origen de datos ADO .NET, es mediante la utilizacin de los componentes diseables incluidos en el entorno de desarrollo de Visual Studio .NET, de sta forma podr enlazar cualquier control con un campo de una tabla de datos, sin apenas escribir cdigo fuente alguno. Pero mediante la escritura de nuestros propios procedimientos y funciones, es cuando podemos obtener unos resultados mucho ms flexibles y eficientes, al menos en lneas generales. Los pasos a seguir para configurar el enlace en tiempo de ejecucin, bien se podran adaptar al siguiente esquema. 1. Definir a nivel del formulario una variable privada que referencie a un objeto DataSet, de sta manera crearemos un enlace de datos bidireccional, por lo que las modificaciones efectuadas en los valores de los campos enlazados, se almacenarn en el origen de datos, en ste caso, en el objeto DataSet creado, que ser un objeto desconectado de la propia base de datos, lo que significa que los datos de la base no se actualizarn de manera automtica, permaneciendo intactos. Private ds As DataSet 2. Declarar en el mdulo una variable privada del tipo BindingManagerBase, la cual contendr todos los objetos Binding que se encuentren asociados a un mismo origen de datos, que en nuestro caso ser el objeto DataSet mencionado en el punto anterior. Private bmb As BindingManagerBase El objeto BindingManagerBase dispone de la propiedad Position, que es la encargada de establecer la posicin de los valores actuales de los controles. Cuando cambia el valor de la propiedad Position, el objeto BindingManagerBase notifica a todos los objetos Binding asociados, que deben de enviar al origen de datos los valores actuales existentes en los controles de datos, recibiendo asimismo los nuevos valores existentes en la nueva posicin. Estos cambios de posicin hacen que el objeto BindingManagerBase desencadene el evento PositionChanged, el cual podremos aprovechar para realizar cualquier otro tipo de operacin que nos pueda resultar necesaria. 3. Crear el objeto DataSet declarado en el primer punto. Para ello, podemos habilitar en nuestro formulario un procedimiento genrico que sea el encargado de ejecutar todo el cdigo necesario para la creacin del objeto DataSet:
~1~ Ing. Henry M. Arvalo Flores

CONEXIN VB NET SQL SERVER

Apertura de la conexin. Creacin del adaptador de datos. Relleno del objeto DataSet. Cierre de la conexin.

Private Function CreateDataSetOleDb(ByVal cnnString As String, ByVal SQL As String, _ ByVal tableName As String) As DataSet ' Creamos un objeto OleDbConnection Dim cnn As New OleDbConnection(cnnString) Try ' Abrimos la conexin cnn.Open() ' Creamos un adaptador de datos Dim da As New OleDbDataAdapter(SQL, cnn) ' Rellenamos el objeto DataSet con los datos de la consulta SQL Dim ds As New DataSet da.Fill(ds, tableName) Return ds Catch ex As Exception MessageBox.Show(ex.Message, "Crear DataSet") Finally ' Cerramos la conexin cnn.Close() End Try End Function 4. Enlazar los controles con los campos de la base de datos, creando el correspondiente objeto Binding mediante el mtodo Add de la coleccin DataBindings. Dicho mtodo acepta el nombre de la propiedad del control enlazado (generalmente la propiedad Text), la referencia al origen de datos (el objeto DataSet), y el nombre del campo de la tabla de la base de datos, en el formato nombretabla.nombrecampo. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Creamos el conjunto de datos ds = CreateDataSetOleDb("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Mis documentos\Northwind.mdb", _ "SELECT EmployeeID, FirstName, LastName FROM Employees", _ "Employees") If ds Is Nothing Then Exit Sub
~2~ Ing. Henry M. Arvalo Flores

CONEXIN VB NET SQL SERVER

bmb = Me.BindingContext(ds, "Employees") ' Asociamos el evento PositionChanged con un controlador de eventos AddHandler bmb.PositionChanged, AddressOf PositionChanged ' Procedemos a enlazar los controles de texto txtEmployeeID.DataBindings.Add("Text", ds, "Employees.EmployeeID") txtFirstName.DataBindings.Add("Text", ds, "Employees.FirstName") txtLastName.DataBindings.Add("Text", ds, "Employees.LastName") ' Actualizar With bmb .Position = .Count .Position = 0 End With End Sub Una vez creado el conjunto de datos, y enlazados los correspondientes controles, solo nos queda escribir el cdigo necesario en los distintos botones de comando, para que podamos movernos de una posicin a otro dentro del origen de datos (el objeto DataSet). Private Sub PositionChanged(ByVal sender As Object, ByVal e As EventArgs) lblReg.Text = "Registro " & (bmb.Position + 1) & " de " & bmb.Count End Sub Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click bmb.Position = 0 End Sub Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click bmb.Position -= 1 End Sub Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click bmb.Position += 1 End Sub Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click bmb.Position = bmb.Count - 1 End Sub Si ejecuta el proyecto, observar que puede desplazarse por los distintos registros pulsando sobre los correspondientes botones, almacenndose en el origen de datos (el
~3~ Ing. Henry M. Arvalo Flores

CONEXIN VB NET SQL SERVER

objeto DataSet) todas las modificaciones que efecte sobre los campos. Pero al estar trabajando en un entorno desconectado de la propia base de datos, esas modificaciones realizadas no tendrn efecto en la propia base de datos: tendr que utilizar un objeto DataAdapter apropiado para enviar las modificaciones a la base de datos. De ello se encargar el siguiente procedimiento genrico, el cual actualiza un origen de datos OleDb: Private Sub UpdateOleDb(ByVal ds As DataSet, ByVal cnnString As String, _ ByVal SQL As String, ByVal tableName As String) ' Creamos un objeto OleDbConnection Dim cnn As New OleDbConnection(cnnString) Try ' Abrimos la conexin cnn.Open() ' Creamos un adaptador de datos Dim da As New OleDbDataAdapter(SQL, cnn) ' Rellenamos el objeto DataSet con los datos' de la consulta SQL da.Fill(ds, tableName) ' Creamos un objeto CommandBuilder para actualizar los datos Dim cmdBuilder As New OleDbCommandBuilder(da) With da .InsertCommand = cmdBuilder.GetInsertCommand .DeleteCommand = cmdBuilder.GetDeleteCommand .UpdateCommand = cmdBuilder.GetUpdateCommand End With ' Enviamos los cambios a la base de datos da.Update(ds, tableName) Catch ex As Exception MessageBox.Show(ex.Message, "Actualizar Datos") Finally ' Cerramos la conexin cnn.Close() End Try End Sub Siguiendo con nuestro ejemplo, para llamar al procedimiento UpdateOleDb utilizaramos el siguiente cdigo: UpdateOleDb(ds, "Provider=Microsoft.Jet.OLEDB.4.0;" &_ "Data Source=C:\Mis documentos \Northwind.mdb", _ "SELECT EmployeeID, FirstName, LastName FROM Employees", "Employees")
~4~ Ing. Henry M. Arvalo Flores

Potrebbero piacerti anche