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