Utilidades de Sql Server con ADO.NET – Obtener información de archivos de una base de datos

Hola ¿Qué tal?…


Continuando con las utilidades de SQL Server con ADO.NET  toca el turno a una nueva funcionalidad que puede ser de gran ayuda al momento de cambiar de nombre a una base de datos de SQL Server.


Esta funcionalidad podrá ser utilizada con bases de datos de SQL Server 2005, aunque en ocasiones tendré que especificar si es posible en versiones anteriores a SQL Server 2005 ya que estaré publicando estas utilidades principalmente para funcionar en SQL Server 2005.


Consultar Información de Archivos de una Base de Datos con T-SQL


Una vez realizada la instrucción de la sección anterior, ejecutemos una consulta a las vistas de sistema para verificar el nombre lógico de los archivos de la base de datos. Comúnmente estos archivos llevan el mismo nombre de la base de datos, veamos cómo se hace esta consulta a las vistas de sistema, que en este caso será a la vista sys.database_files, esta vista nos da información acerca de los archivos de la base de datos en contexto, esto se refiere a que como es una vista de sistema, tomará la base de datos que está en el contexto de la conexión para obtener la información de los archivos. Para ver la información completa de los archivos de una base de datos, se utiliza una instrucción como la siguiente:

Use AdventureWorks
Select * From sys.database_files


Esta consulta devolverá toda la información de los archivos, tomaremos una consulta simple, o bien, compacta para consultar los archivos:

Use AdventureWorks
Select Name From sys.database_files


Estos ejemplos nos sirven para consultar los nombres de archivo, sin embargo, en una secuencia de cambio de nombre, habrá que considerar que el nombre de la base de datos ha cambiado, para lo cual la secuencia podría quedar como sigue:

ALTER DATABASE AdventureWorks MODIFY NAME = NewAdventureWorks
GO
Use NewAdventureWorks
Select Name From sys.database_files


Dado que es necesario ejecutar la instrucción ALTER DATABASE de manera independiente, deberemos utilizar la instrucción GO del analizador de consultas para que separe la ejecución de la instrucción ALTER DATABASE de la ejecución de la consulta, quedando como dos ejecuciones independientes.


Consultar Información de Archivos de una Base de Datos con ADO.NET


Realizaremos una consulta a las vistas de sistema y llenaremos un DataTable con la información para tenerla disponible. Esto nos será útil en el proceso que cambiará los nombres de los archivos de la base de datos.


Para la creación de este método utilizaré los campos file_id, type, type_desc, name y physical_name, que son los que nos dan información suficiente sobre los archivos y el tipo al que pertenecen. En el siguiente ejemplo se muestra cómo quedará el código para realizar la consulta:


VB.NET

Public Function GetDataBaseFileInfo() As DataTable
    ‘Declaramos el DataAdapter que usaremos para
    ‘llenar el DataTable
    Dim da As SqlDataAdapter
    ‘Declaramos el DataTable que se usará
    ‘para devolver el resultado
    Dim dt As DataTable = New DataTable()
    ‘Declaramos el SqlCommand que se usará
    ‘para ejecutar la consulta
    Dim cmd As SqlCommand = _
        New SqlCommand(“Select file_id,type, “ & _
                        “type_desc,name,physical_name “ & _
                        “From sys.database_files”)
    ‘Asignamos la conexión al SqlCommand
    ‘construido en la variable cmd
    cmd.Connection = cnn
    ‘Construimos el DataAdapter en la variable
    ‘da utiizando la variable cmd como parámetro
    ‘del constructor
    da = New SqlDataAdapter(cmd)
    ‘Intentaremos llenar la tabla
    Try
        ‘Se ejecuta el método fill que
        ‘llenará la tabla
        da.Fill(dt)
    Catch ex As SqlException
        ‘Capturamos los mensajes de error
        mMessages = ex.Message
    End Try
    ‘Devolvemos la variable dt previamente
    ‘construida
    Return dt
End Function


C#

public DataTable GetDataBaseFileInfo()
{
    //Declaramos el DataAdapter que usaremos para
    //llenar el DataTable
    SqlDataAdapter da;
    //Declaramos el DataTable que se usará
    //para devolver el resultado
    DataTable dt = new DataTable();
    //Declaramos el SqlCommand que se usará
    //para ejecutar la consulta
    SqlCommand cmd = new SqlCommand(“Select file_id,type,” +
        “type_desc,name,physical_name From sys.database_files”);
    //Asignamos la conexión al SqlCommand
    //construido en la variable cmd
    cmd.Connection = cnn;
    //Construimos el DataAdapter en la variable
    //da utiizando la variable cmd como parámetro
    //del constructor
    da = new SqlDataAdapter(cmd);
    //Intentaremos llenar la tabla
    try
    {
        //Se ejecuta el método fill que
        //llenará la tabla
        da.Fill(dt);
    }
    catch (SqlException ex)
    {
        //Capturamos los mensajes de error
        messages = ex.Message;
    }
    //Devolvemos la variable dt previamente
    //construida
    return dt;
}


De esta manera devolvemos de manera conveniente los resultados de la consulta en un DataTable para utilizarlo posteriormente. Cabe mencionar que no se muestra el momento en que se abre la conexión ni tampoco cuando se cierra, y esto es debido a que el método Fill del SqlDataAdapter se encargará de abrir y cerrar la conexión. Otra observación que hay que tener en cuenta es que la consulta se realizará bajo el contexto de la base de datos de la información del ConnectionString del objeto cnn.

Conclusiones

Como hemos visto hasta ahora, realizar la transformación de T-SQL a ADO.NET ha sido completamente sencillo ya que solo hemos tenido que asignar las instrucciones T-SQL al CommandText de nuestra variable de SqlCommand, seguido solo asignamos la conexión, abrimos la conexión y ejecutamos el SqlCommand. Las demás utilidades que estaré publicando, se hacen de la misma manera.


Recuerden que este método está pensado en el diseño original de la clase SqlUtilities que creamos en la primera publicación de la serie el cual está aquí:


http://msmvps.com/blogs/otelis/archive/2007/06/19/utilidades-de-sql-server-con-ado-net-regenerar-campos-identity.aspx


He decidido publicar segmentos más cortos para  mejor asimilación, este es el primer segmento de la serie que terminará en el método que automatiza el cambio de nombre de una base de datos por completo, así que estén pendientes.


Espero que haya sido de utilidad, nos vemos en el próximo post.


Saludos…

Octavio Telis

2 thoughts on “Utilidades de Sql Server con ADO.NET – Obtener información de archivos de una base de datos”

  1. Es buena propuesta, sin embargo será de poco a poco ya que no estoy planeando orientarme totalmente a SQL Server 2005 (2008). Ya iré mezclando lo mismo de SQL Server – ADO.NET a utlilidades con SMO, además de que todavía estoy preparando las últimas tres entradas de las utilidades con ADO.NET.

    Gracias por el comentario.

    Saludos…

    Octavio Telis

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>