Vamos a conectar una aplicación de Visual Basic.NET a una Base de Datos SQL SERVER 2005 a través del Wizard que proporciona Visual Studio 2005 para conectarla con un DataSource. También daré nociones de otra forma de hacerlo que no desarrollaré. Finalmente haremos la misma operación pero por código.
A través de DataSource
Continuando con nuestro programa de ejemplo, sobre
nuestro proyecto de Visual Studio 2005 (Visual Basic), añadimos un combo al
formulario y procedemos del siguiente modo para enlazarlo a una tabla de nuestra base de
Datos:
1.Añadimos
los controles del componente Microsoft
remoteData Control 6.0
2. En la barra de
herramientas aparece:
Elegimos BindingSource y colocamos sobre el
formulario.
3. Para conectarla a la base de
datos
Elegimos dataSource en el cuadro de propiedades del
BindingSource y seguimos el Wizard.
Elegimos los parámetros de conexión que se corresponden con nuestra Base de Datos.
Ahora en la barra de herramientas aparecerán nuevas
herramientas de Base de datos
4. En las propiedades del Combo añado la herramienta
deseada (asociada a la tabla de la que deseamos leer los datos)
5. En ValueMember elegimos el campo a mostrar.
6. Para poder acceder al campo código de la tabla
desde el código de Visual Basic podemos definir el campo deseado en las
propiedades del combo.
7. Y después leerlo en el código de VB en el evento _SelectedIndexChanged
Private Sub
CboHospitales_SelectedIndexChanged(ByVal sender
As System.Object, ByVal
e As System.EventArgs) Handles
CboHospitales.SelectedIndexChanged
Dim CodigoHosp As String
CodigoHosp =
CboHospitales.SelectedItem.Row.ItemArray(1)
También podemos ver su valor en tiempo de ejecución
en la ventana watch
8. Finalmente ejecutamos la aplicación para ver que
ha enlazado el campo de la tabla correctamente.
Podemos proceder del mismo modo con una caja de
texto corriente.
Elegimos el objeto para la tabla y el campo deseados
Ahora al ejecutar el proyecto, cada vez que elegimos
un hospital, aparece en la caja su dirección.
Para establecer el teléfono, Colocamos sobre el formulario un objeto
tbHospTelBindingSource y lo definimos
Colocamos una caja de lista y ponemos esto en sus
propiedades:
Otra forma de conectarse: con SQL Datasbase
En proyecto, Add New Item
Se elige SQL Database
Conectar una aplicación Visual Basic.Net a una Base de Datos SQL Server 2005 mediante código
Para hacer lo mismo que se acaba de realizar pero
por código, se procede del siguiente modo:
Creamos un módulo de conexión llamado conexion.vb e
incluimos las siguientes líneas:
Módulo genérico de conexión
Imports System.Data.SqlClient
Imports System.Data
Module Conexion
Public cnDB As
SqlClient.SqlConnection
Dim cmDB As
SqlClient.SqlCommand
Dim dsDB As DataSet
Public Sub conectar(ByVal CadConectarSql As
String)
cnDB = New SqlClient.SqlConnection
cnDB.ConnectionString = CadConectarSql
Try
cnDB.Open()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Public Sub desconectar()
cnDB.Close()
End Sub
Public Function
conSelect(ByVal cadConsul As String) As DataTable
Dim dtTabla As New DataTable
Try
cmDB
= New SqlClient.SqlCommand(cadConsul, cnDB)
dtTabla = New DataTable()
Catch
' // MessageBox.Show(ex.Message);
End Try
Return dtTabla
End Function
Public Function
conInsert(ByVal cadInsert As String) As DataTable
Dim dtTabla As New DataTable
Try
cmDB
= New SqlClient.SqlCommand(cadInsert, cnDB)
cmDB.ExecuteNonQuery()
Catch
' // MessageBox.Show(ex.Message);
End Try
Return dtTabla
End Function
End Module
Para hacer uso de la conexión, en la clase form1
en el form1_load, hacemos uso
del método conInsert para hacer un
insert sobre la base de datos.
Para hacer un insert o un delete
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim CadConexion As String
CadConexion = "User
ID=sa;Initial Catalog=model;Data Source=SRV- SERVIDOR\INSTANCIASQL2005;Password=xxxxxxx"
Conexion.conectar(CadConexion)
Conexion.conInsert("INSERT INTO dbo.tbHospital VALUES ('HOS99','Prueba','Borrar 34')")
End Sub
O para una select
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim CadConexion As String
Dim dt As New DataTable
Dim Valor As String
CadConexion = "User
ID=sa;Initial Catalog=model;DataSource=SRV-SERVIDOR\INSTANCIASQL2005;Password=xxxxxxx"
Conexion.conectar(CadConexion)
Dim daDB As New
SqlClient.SqlDataAdapter("SELECT * FROM
dbo.tbHospital", Conexion.cnDB)
daDB.Fill(dt)
Valor =
dt.Rows(2).Item(2)
MessageBox.Show(Valor)
Conexion.desconectar()
End Sub
O bien para conectar un Data grid a los resultados
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim CadConexion As String
Dim ds As New DataSet()
CadConexion = "User
ID=sa;Initial Catalog=model;Data Source=
SRV-SERVIDOR\INSTANCIASQL2005;Password= xxxxxxx"
Conexion.conectar(CadConexion)
Dim daDB As New SqlClient.SqlDataAdapter("Select
* From dbo.tbHospital", Conexion.cnDB)
daDB.MissingSchemaAction
= MissingSchemaAction.AddWithKey
daDB.FillSchema(ds,
SchemaType.Source, "Cust")
daDB.Fill(ds,
"Cust")
DataGridView1.DataSource
= ds
DataGridView1.DataMember
= "Cust"
End Sub
Explicación de la cadena de Conexión:
User ID=sa; Usuario sa del SQL SERVER 2005
Initial Catalog=model; Nombre de la
Base de Datos
Data Source= SRV-SERVIDOR\INSTANCIASQL2005; nombre de la
instancia de SQL SERVER 2005
Password=xxxxxxx; Password del sa del SQL SERVER 2005
En este enlace está la clase completa para conexión a base de datos.
En este enlace está la clase completa para conexión a base de datos.
muy bueno pero como harias un update
ResponderEliminarExactamente igual que un insert, a lo mejor despista que haya llamado a la función conInsert() debería haberla llamado conMantenimiento() o similar, basta con sustituir el INSERT por un UPDATE pues esa función lo que hace que al final que es lo que realmente importa es el cmDB.ExecuteNonQuery()
ResponderEliminarLo siento, pero lo más moderno de que dispongo en Visual Studio 2005.
ResponderEliminarNo entiendo lo del select:
ResponderEliminarDim daDB As New SqlClient.SqlDataAdapter("SELECT * FROM dbo.tbHospital", Conexion.cnDB)
daDB.Fill(dt)
Valor = dt.Rows(2).Item(2)
MessageBox.Show(Valor)
Conexion.desconectar()
End Sub
para que sirve esa parte? por que no es simplemente igual a lo que se hace en el insert?
No, el insert, el update y el delete ejecutan operaciones sobre la base de datos y
ResponderEliminarsólo necesitamos saber si todo ha sido correcto o no.
Con la select debemos capturar los valores devueltos que pueden ser muchos miles de registros
con decenas de campos cada uno.
En este caso los valores devueltos por la select se cargan en el adaptador de base de datos:
daDB.Fill(dt)
Y luego para manejarlos creamos un datatable que cargamos con los resultados de este adatador
según nuestra demanda.
Valor = dt.Rows(2).Item(2)
En este caso particular hemos recogido el valor de la fila 2 y la columna 2 y luego lo
mostramos en un mensaje.
Si queremos la fila n y la columna m simplemente hacemos Valor = dt.Rows(n).Item(m)
Pero se supone que el select busca, como voy a selecccionar el valor de la fila y de la columna si no se donde esta lo que estoy buscando?
ResponderEliminarEso ya depende de las circunstancias de cada programa. La select busca si sabes que buscar.
ResponderEliminarCuanto más fino sea el filtrado de la select menos registros devolverá. Incluso si sabes bien qué buscar, puede devolver sólo un registro.
En el caso de que como dices, estés buscando. Lo mejor es volcar los resultados en un data grid para que sea el usuario de la aplicación el que busque el registro o registros deseados.
Gracias buena ayuda para mi
ResponderEliminar