You are on page 1of 4

Página 1 de 4

¿Cómo obtener con Visual Basic .NET las tablas de una base de
datos en SQL Server y sus estructuras?

Realizar esta tarea con Visual Basic .NET 2008 es realmente sencillo y nada fuera de lo
común. Lo primero que debemos hacer (para seguir el ejemplo) es crear un formulario
con una apariencia similar a la siguiente:

Debemos agregar 4 TextBox, los cuales se utilizarán para realizar la conexión al


servidor. Sus nombres a continuación:

 txtServidor
 txtUsuario
 txtContrasena
 txtBD

Dos botones (uno para conectar al servidor y otro para cerrar la aplicación):

 btnConectar
 btnCerrar

Kubical ORG Software Studio Teléfono: (+506) 2417-1912 Sitio web: www.kubicalorg.net
Página 2 de 4

Un ListBox para cargar la lista de tablas de la base de datos: lstTablas.

Finalmente, un ListView que se utilizará para mostrar la estructura de una tabla cuando
sea seleccionada. El ListView debe contener las siguientes columnas:

 Columna
 Tipo
 Longitud
 Nulos

Para este ejemplo tomaremos únicamente esos datos de INFORMATION_SCHEMA.


INFORMATION_SCHEMA contiene toda la información que necesitamos para obtener la
lista de tablas y sus estructuras.

Ahora únicamente nos falta comenzar a agregar código para ver en funcionamiento la
nueva aplicación (se debe importar System.Data.SqlClient).

Botón btnConectar:

Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnConectar.Click
If Me.txtServidor.Text.Trim <> "" And Me.txtUsuario.Text.Trim <> "" _
And Me.txtBD.Text.Trim <> "" Then
Me.lstTablas.Items.Clear() : Me.lvEstructura.Items.Clear()
Try
'//construimos la cadena de conexion
modGlobal.strConexion_Cadena = "DATA SOURCE=" _
& Me.txtServidor.Text.Trim _
& ";USER ID=" & Me.txtUsuario.Text.Trim & ";PASSWORD=" _
& Me.txtContrasena.Text.Trim _
& ";INITIAL CATALOG=" & Me.txtBD.Text.Trim

Dim conConexion As New SqlConnection(modGlobal.strConexion_Cadena)

'//abrimos la conexion para verificar si podemos ingresar al servidor


conConexion.Open()
'//cerramos la conexion
conConexion.Close()

'//mostramos las tablas de la bd


Call Me.psMostrar_Tablas()
Me.lstTablas.Focus()
Catch ex As Exception
MessageBox.Show(ex.Message, _
“Mensaje”, MessageBoxButtons.OK,
MessageBoxIcon.Error)
End Try
Else
If Me.txtServidor.Text.Trim = "" Then
MessageBox.Show("Por favor, digite el nombre del servidor.", _
“Mensaje”, MessageBoxButtons.OK,
MessageBoxIcon.Error)
Me.txtServidor.Clear() : Me.txtServidor.Focus()
ElseIf Me.txtUsuario.Text.Trim = "" Then
MessageBox.Show("Por favor, digite el usuario que desea utilizar.", _
“Mensaje”, MessageBoxButtons.OK,
MessageBoxIcon.Error)
Me.txtUsuario.Clear() : Me.txtUsuario.Focus()
Else
MessageBox.Show("Por favor, digite el nombre de la base de datos.", _
“Mensaje”, MessageBoxButtons.OK,

Kubical ORG Software Studio Teléfono: (+506) 2417-1912 Sitio web: www.kubicalorg.net
Página 3 de 4
MessageBoxIcon.Error)
Me.txtBD.Clear() : Me.txtBD.Focus()
End If
End If
End Sub

El código anterior nos permitirá conectarnos al servidor de bases de datos y obtener la


lista de tablas por medio de la llamada al procedimiento psMostrar_Tablas.

Procedimiento psMostrar_Tablas:

Private Sub psMostrar_Tablas()


Me.lstTablas.Items.Clear()
Try
Dim conConexion As New SqlConnection(modGlobal.strConexion_Cadena)
Dim coSQL As New SqlCommand("SELECT TABLE_NAME FROM INFORMATION_” _
& “SCHEMA.TABLES WHERE TABLE_NAME<>'sysdiagrams' ORDER BY TABLE_” _
& “NAME", conConexion)
Dim drTablas As SqlDataReader

conConexion.Open()
drTablas = coSQL.ExecuteReader
While drTablas.Read
Me.lstTablas.Items.Add(drTablas("TABLE_NAME"))
End While
drTablas.Close()
conConexion.Close()
If Me.lstTablas.Items.Count > 0 Then Me.lstTablas.SelectedIndex = 0
Catch ex As Exception
MessageBox.Show(ex.Message, _
“Mensaje”, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

El procedimiento psMostrar_Tablas obtiene el nombre de todas las tablas de la base de


datos especificada por el usuario (en el campo txtBD) y las agrega a lstTablas.

Procedimiento psEstructura_Tabla:

Private Sub psEstructura_Tabla(ByVal strTabla As String)


Me.lvEstructura.Items.Clear()
Try
Dim conConexion As New SqlConnection(modGlobal.strConexion_Cadena)
Dim coSQL As New SqlCommand("SELECT COLUMN_NAME,DATA_TYPE,” _
& “CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE FROM INFORMATION_SCHEMA.” _
& “COLUMNS WHERE TABLE_NAME='" & strTabla & "'", conConexion)
Dim drColumnas As SqlDataReader

conConexion.Open()
drColumnas = coSQL.ExecuteReader
While drColumnas.Read
With Me.lvEstructura
.Items.Add(drColumnas("COLUMN_NAME"))
.Items(.Items.Count - 1).SubItems.Add(drColumnas("DATA_TYPE"))
If Not Convert.IsDBNull(drColumnas("CHARACTER_MAXIMUM_LENGTH")) Then
.Items(.Items.Count -
1).SubItems.Add(drColumnas("CHARACTER_MAXIMUM_LENGTH"))
Else
.Items(.Items.Count - 1).SubItems.Add("")
End If
.Items(.Items.Count - 1).SubItems.Add(drColumnas("IS_NULLABLE"))
End With

Kubical ORG Software Studio Teléfono: (+506) 2417-1912 Sitio web: www.kubicalorg.net
Página 4 de 4
End While
drColumnas.Close()
conConexion.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, _
“Mensaje”, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

psEstructura_Tabla nos permite obtener la lista de campos de una tabla (strTabla), su


tipo, longitud máxima y saber si el campo permite valores nulos. Este procedimiento es
llamado en el evento SelectedIndexChanged del ListBox lstTablas.

Evento SelectedIndexChanged del lstTablas:

Private Sub lstTablas_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles lstTablas.SelectedIndexChanged
Call Me.psEstructura_Tabla(Me.lstTablas.Text)
End Sub

Este evento carga la estructura de cualquiera de las tablas seleccionadas en el ListBox.

Como pueden ver, esto no requiere de conocimientos avanzados y además, podría


realizarse con cualquier otro lenguaje que no sea VB .NET. INFORMATION_SCHEMA
está disponible en la base de datos para ser utilizado.

Este ejemplo puede funcionar con MySQL, únicamente se debe instalar el driver para
conectar al servidor (MySQLDriverCS) y realizar cambios mínimos.

Se permite la publicación y distribución de la totalidad o parte de este documento (por


cualquier medio), siempre y cuando se mencionen los datos del autor y el contenido se
mantenga intacto.

Desarrollado por Juan Carlos Rojas


© 2010 Kubical ORG Software Studio
Puriscal, San José, Costa Rica

Kubical ORG Software Studio Teléfono: (+506) 2417-1912 Sitio web: www.kubicalorg.net

You might also like