Índice de la sección dedicada a .NET (en el Guille) ADO .NET

Saber las bases de datos de una instancia de SQL Server con Visual Basic

Publicado el 05/Feb/2006
Actualizado el 05/Feb/2006
Autor: Guillermo 'guille' Som

Código de ejemplo para saber las bases de datos de una instancia (o servidor) de SQL Server usando código de Visual Basic para .NET (cualquier versión)

 

Introducción

En este código de ejemplo, te voy a mostrar una función que devuelve un array de tipo String con los nombres de las bases de datos que contiene una instancia (o servidor) de SQL Server.

En ese array no se devuelven las bases de datos que el propio SQL Server utiliza para sus "cosillas", pero como comprobarás por el código, es fácil hacer que se devuelvan, ya que esas cuatro bases de datos (master, model, msdb y tempdb) las he puesto dentro de un array para que se compruebe antes de devolver los nombres de las demás bases de datos que esa instancia de SQL contiene.

Como verás, es un código bien simple, y lo que hago es utilizar la tabla sysdatabases que el propio SQL Server utiliza para esas y otras cosas. Por tanto, lo que hacemos es hacer una "consulta" (query) a esa tabla y por medio del campo name de esa tabla, sabremos los nombres de las bases de datos.

Esto nos puede resultar útil para saber los nombres de las bases de datos de una instancia en particular de SQL Server.
Pulsa aquí si quieres saber las instancias que hay en SQL Server del equipo actual.

En cualquier caso, debo decirte que es posible que esos valores solo puedas averiguarlos si tienes permisos suficientes, vamos que si el usuario actual de Windows dispone de esos privilegios. Aunque puedes indicar un usuario y password en la cadena de conexión, ya que en este ejemplo, uso la autenticación integrada (o del usuario actual de Windows).

 

Para que este código funcione debes tener la referencia a System.Data y la importación de los espacios de nombres System.Data y System.DataSqlClient.

 

El código de Visual Basic para .NET

Este código es válido para cualquier versión de Visual Basic para punto NET.

Private Function basesDeDatos(ByVal instancia As String) As String()
    ' Las bases de datos de SQL Server
    Dim basesSys() As String = {"master", "model", "msdb", "tempdb"}
    Dim bases() As String
    Dim dt As New DataTable
    ' Usamos la seguridad integrada de Windows
    Dim sCnn As String = "Server=" & instancia & "; " & _
            "database=master; integrated security=yes"

    ' La orden T-SQL para recuperar las bases de master
    Dim sel As String = "SELECT name FROM sysdatabases"
    Try
        Dim da As New SqlDataAdapter(sel, sCnn)
        da.Fill(dt)
        ReDim bases(dt.Rows.Count - 1)
        Dim k As Integer = -1
        For i As Integer = 0 To dt.Rows.Count - 1
            Dim s As String = dt.Rows(i).Item("name").ToString()
            ' Solo asignar las bases que no son del sistema
            If Array.IndexOf(basesSys, s) = -1 Then
                k += 1
                bases(k) = s
            End If
        Next
        If k = -1 Then Return Nothing
        ReDim Preserve bases(k)
        Return bases

    Catch ex As Exception
        MessageBox.Show(ex.Message, _
                        "Error al recuperar las bases de la instancia indicada", _
                        MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
    Return Nothing
End Function

 

Y esto es todo.
Espero que te sea de utilidad, que de eso es de lo que se trata.

Nos vemos.
Guillermo


Ir al índice principal de el Guille