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