Compartir a través de


Depurar procedimientos almacenados (VB)

de Scott Mitchell

Descargar PDF

Las ediciones de Visual Studio Professional y Team System permiten establecer puntos de interrupción y pasar a procedimientos almacenados en SQL Server, lo que facilita la depuración de procedimientos almacenados como depuración del código de la aplicación. En este tutorial se muestra la depuración directa de bases de datos y la depuración de aplicaciones de procedimientos almacenados.

Introducción

Visual Studio proporciona una experiencia de depuración sólida. Con algunas pulsaciones de tecla o clics del mouse, es posible usar puntos de interrupción para detener la ejecución de un programa y examinar su estado y flujo de control. Además de la depuración del código de aplicación, Visual Studio ofrece soporte para la depuración de procedimientos almacenados dentro de SQL Server. Al igual que los puntos de interrupción se pueden establecer dentro del código de una clase de código subyacente de ASP.NET o clase de capa lógica empresarial, por lo que también se pueden colocar dentro de los procedimientos almacenados.

En este tutorial exploraremos cómo entrar en los procedimientos almacenados desde el Explorador de Servidores dentro de Visual Studio, así como cómo establecer puntos de interrupción que se alcanzan cuando se llama al procedimiento almacenado desde la aplicación ASP.NET en ejecución.

Nota:

Desafortunadamente, los procedimientos almacenados solo se pueden introducir y depurar a través de las versiones Professional y Team Systems de Visual Studio. Si usa Visual Web Developer o la versión estándar de Visual Studio, le invitamos a leer a medida que se describen los pasos necesarios para depurar procedimientos almacenados, pero no podrá replicar estos pasos en su equipo.

Conceptos de depuración en SQL Server

Microsoft SQL Server 2005 se diseñó para proporcionar integración con Common Language Runtime (CLR), que es el entorno de ejecución que usan todos los ensamblados .NET. Por lo tanto, SQL Server 2005 admite objetos de base de datos administrados. Es decir, puede crear objetos de base de datos como procedimientos almacenados y User-Defined Functions (UDF) como métodos en una clase de Visual Basic. Esto permite que estos procedimientos almacenados y UDF usen la funcionalidad en .NET Framework y desde sus propias clases personalizadas. Por supuesto, SQL Server 2005 también proporciona compatibilidad con objetos de base de datos T-SQL.

SQL Server 2005 ofrece compatibilidad de depuración para objetos de base de datos T-SQL y objetos administrados. Sin embargo, estos objetos solo se pueden depurar a través de las ediciones Visual Studio 2005 Professional y Team Systems. En este tutorial examinaremos la depuración de objetos de base de datos T-SQL. En el tutorial siguiente se examina la depuración de objetos de base de datos administrados.

La entrada de blog Introducción a la depuración de T-SQL y CLR en SQL Server 2005 del equipo de integración clR de SQL Server 2005 resalta las tres maneras de depurar objetos de SQL Server 2005 desde Visual Studio:

  • Depuración directa de bases de datos (DDD): desde el Explorador de servidores, podemos entrar en cualquier objeto de base de datos T-SQL, como procedimientos almacenados y UDF. Examinaremos DDD en el paso 1.
  • Depuración de aplicaciones: podemos establecer puntos de interrupción dentro de un objeto de base de datos y, a continuación, ejecutar nuestra aplicación de ASP.NET. Cuando se ejecuta el objeto de base de datos, se alcanzará el punto de interrupción y el control pasará al depurador. Tenga en cuenta que, con la depuración de aplicaciones, no podemos entrar en un objeto de base de datos desde el código de la aplicación. Debemos establecer explícitamente puntos de interrupción en esos procedimientos almacenados o funciones definidas por el usuario donde queremos que el depurador se detenga. La depuración de aplicaciones se examina a partir del paso 2.
  • La depuración desde un proyecto de SQL Server : las ediciones Visual Studio Professional y Team Systems incluyen un tipo de proyecto de SQL Server que se usa normalmente para crear objetos de base de datos administrados. Examinaremos el uso de proyectos de SQL Server y depuraremos su contenido en el siguiente tutorial.

Visual Studio puede depurar procedimientos almacenados en instancias locales y remotas de SQL Server. Una instancia local de SQL Server es una que se instala en la misma máquina que Visual Studio. Si la base de datos de SQL Server que usa no se encuentra en la máquina de desarrollo, se considera una instancia remota. En estos tutoriales se han usado instancias locales de SQL Server. La depuración de procedimientos almacenados en una instancia remota de SQL Server requiere más pasos de configuración que al depurar procedimientos almacenados en una instancia local.

Si usa una instancia local de SQL Server, puede empezar con el paso 1 y trabajar con este tutorial hasta el final. Sin embargo, si está utilizando una instancia remota de SQL Server, primero deberá asegurarse de que, al depurar, haya iniciado sesión en su máquina de desarrollo con una cuenta de usuario de Windows que tenga un inicio de sesión de SQL Server en la instancia remota. Además, tanto este inicio de sesión de base de datos como el inicio de sesión de la base de datos usado para conectarse a la base de datos desde la aplicación de ASP.NET en ejecución deben ser miembros del rol sysadmin. Consulte la sección Depuración de objetos de base de datos T-SQL en instancias remotas al final de este tutorial para obtener más información sobre cómo configurar Visual Studio y SQL Server para depurar una instancia remota.

Por último, comprenda que la compatibilidad de depuración con objetos de base de datos T-SQL no es tan completa como la compatibilidad de depuración con aplicaciones .NET. Por ejemplo, no se admiten condiciones y filtros de punto de interrupción, solo hay disponible un subconjunto de las ventanas de depuración, no se puede usar Editar y continuar, la ventana Inmediato se representa como inútil, etc. Consulte Limitaciones de los comandos y características del depurador para obtener más información.

Paso 1: Ejecutar directamente un procedimiento almacenado

Visual Studio facilita la depuración directa de un objeto de base de datos. Echemos un vistazo a cómo usar la característica Depuración directa de bases de datos (DDD) para profundizar en el Products_SelectByCategoryID procedimiento almacenado en la base de datos Northwind. Como su nombre indica, Products_SelectByCategoryID devuelve información de productos para una categoría determinada; se creó en el tutorial Uso de procedimientos almacenados existentes para los TableAdapters de Typed DataSet. Para empezar, vaya al Explorador de servidores y expanda el nodo de base de datos Northwind. A continuación, explore en profundidad la carpeta Procedimientos almacenados, haga clic con el botón derecho en el Products_SelectByCategoryID procedimiento almacenado y elija la opción Paso a paso por procedimiento almacenado en el menú contextual. Esto iniciará el depurador.

Dado que el Products_SelectByCategoryID procedimiento almacenado espera un @CategoryID parámetro de entrada, se le pide que proporcione este valor. Introduzca 1, que devolverá información sobre las bebidas.

Usa el valor 1 para el parámetro @CategoryID" />

Figura 1: Usar el valor 1 para el @CategoryID parámetro

Después de proporcionar el valor para el @CategoryID parámetro , se ejecuta el procedimiento almacenado. En lugar de ejecutarse hasta la finalización, el depurador detiene la ejecución en la primera instrucción. Observe la flecha amarilla en el margen, que indica la ubicación actual en el procedimiento almacenado. Puede ver y editar los valores de los parámetros a través de la ventana de Inspección o pasando el cursor sobre el nombre del parámetro en el procedimiento almacenado.

El depurador se ha detenido en la primera instrucción del procedimiento almacenado

Figura 2: El depurador se ha detenido en la primera declaración del procedimiento almacenado (haga clic para ver la imagen en tamaño completo)

Para recorrer el procedimiento almacenado una instrucción a la vez, haga clic en el botón Pasar por encima en la barra de herramientas o presione la tecla F10. El Products_SelectByCategoryID procedimiento almacenado contiene una única SELECT instrucción, por lo que al presionar F10 se procederá sobre la instrucción única y se completará la ejecución del procedimiento almacenado. Una vez que se haya completado el procedimiento almacenado, su salida aparecerá en la ventana de salida y el depurador finalizará.

Nota:

La depuración de T-SQL se produce a nivel de instrucciones; no se puede entrar en una instrucción SELECT paso a paso.

Paso 2: Configurar el sitio web para la depuración de aplicaciones

Aunque la depuración de un procedimiento almacenado directamente desde el Explorador de servidores es útil, en muchos escenarios estamos más interesados en depurar el procedimiento almacenado cuando se llama desde nuestra aplicación ASP.NET. Podemos agregar puntos de interrupción a un procedimiento almacenado desde Visual Studio y, a continuación, iniciar la depuración de la aplicación ASP.NET. Cuando se invoca un procedimiento almacenado con puntos de interrupción desde la aplicación, la ejecución se detendrá en el punto de interrupción y podemos ver y cambiar los valores de parámetro del procedimiento almacenado y recorrer sus instrucciones, como hicimos en el paso 1.

Para empezar a depurar procedimientos almacenados llamados desde la aplicación, es necesario indicar a la aplicación web ASP.NET que se integre con el depurador de SQL Server. Para empezar, haga clic con el botón derecho en el nombre del sitio web en el Explorador de soluciones (ASPNET_Data_Tutorial_74_VB). Elija la opción Páginas de propiedades en el menú contextual, seleccione el elemento Opciones de inicio de la izquierda y active la casilla SQL Server en la sección Depuradores (vea la figura 3).

Marque el cuadro de verificación SQL Server en las páginas de configuración de la aplicación.

Figura 3: Active la casilla SQL Server en las páginas de propiedades de la aplicación (haga clic para ver la imagen de tamaño completo)

Además, es necesario actualizar la cadena de conexión de base de datos usada por la aplicación para que la agrupación de conexiones esté deshabilitada. Cuando se cierra una conexión a una base de datos, el objeto correspondiente SqlConnection se coloca en un grupo de conexiones disponibles. Al establecer una conexión a una base de datos, se puede recuperar un objeto de conexión disponible de este grupo en lugar de tener que crear y establecer una nueva conexión. Esta agrupación de objetos de conexión es una mejora del rendimiento y está habilitada de forma predeterminada. Sin embargo, al depurar queremos desactivar la agrupación de conexiones porque la infraestructura de depuración no se restablece correctamente cuando se trabaja con una conexión que procede del grupo.

Para la deshabilitación de la agrupación de conexiones, actualice el NORTHWNDConnectionString en Web.config para que incluya la configuración Pooling=false.

<connectionStrings>
    <add name="NORTHWNDConnectionString" connectionString=
        "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;
            Integrated Security=True;User Instance=True;Pooling=false"
        providerName="System.Data.SqlClient" />
</connectionStrings>

Nota:

Una vez que haya terminado de depurar SQL Server a través de la aplicación ASP.NET, asegúrese de restablecer la agrupación de conexiones quitando el ajuste Pooling de la cadena de conexión (o configurándolo en Pooling=true).

En este momento, la aplicación ASP.NET se ha configurado para permitir que Visual Studio depure objetos de base de datos de SQL Server cuando se invoca a través de la aplicación web. Todo lo que queda ahora es agregar un punto de interrupción a una función almacenada e iniciar la depuración.

Paso 3: Agregar un punto de interrupción y depuración

Abra el Products_SelectByCategoryID procedimiento almacenado y establezca un punto de interrupción al principio de la SELECT instrucción haciendo clic en el margen en el lugar adecuado o colocando el cursor al principio de la SELECT instrucción y presionando F9. Como se muestra en la figura 4, el punto de interrupción aparece como un círculo rojo en el margen.

Establecer un punto de interrupción en el procedimiento almacenado de Products_SelectByCategoryID

Figura 4: Establecer un punto de interrupción en el procedimiento almacenado (Products_SelectByCategoryID imagen de tamaño completo)

Para que un objeto de base de datos SQL se depura a través de una aplicación cliente, es imperativo que la base de datos esté configurada para admitir la depuración de aplicaciones. Cuando se establece por primera vez un punto de interrupción, esta configuración debe activarse automáticamente, pero es prudente volver a comprobarlo. Haga clic con el botón derecho en el NORTHWND.MDF nodo en el Explorador de servidores. El menú contextual debe incluir un elemento de menú seleccionado denominado Depuración de aplicaciones.

Asegúrese de que la opción depuración de aplicaciones esté habilitada

Figura 5: Asegurarse de que la opción depuración de aplicaciones está habilitada

Con el punto de interrupción establecido y la opción de depuración de aplicaciones habilitada, estamos listos para depurar el procedimiento almacenado cuando es llamada desde la aplicación ASP.NET. Para iniciar el depurador, vaya al menú Depurar y elija Iniciar depuración; para ello, presione F5 o haga clic en el icono de reproducción verde de la barra de herramientas. Esto iniciará el depurador e iniciará el sitio web.

El Products_SelectByCategoryID procedimiento almacenado se creó en el tutorial Uso de procedimientos almacenados existentes para los TableAdapters del DataSet tipificado. Su página web correspondiente (~/AdvancedDAL/ExistingSprocs.aspx) contiene una tabla GridView que muestra los resultados devueltos por este procedimiento almacenado. Visite esta página a través del explorador. Al llegar a la página, se alcanzará el punto de interrupción del Products_SelectByCategoryID procedimiento almacenado y se devolverá el control a Visual Studio. Al igual que en el paso 1, puede recorrer las instrucciones del procedimiento almacenado y ver y modificar los valores de parámetro.

La página ExistingSprocs.aspx muestra inicialmente las bebidas

Figura 6: La ExistingSprocs.aspx página Muestra inicialmente las bebidas (haga clic para ver la imagen de tamaño completo)

Se ha alcanzado el punto de interrupción del procedimiento almacenado

Figura 7: Se ha alcanzado el punto de interrupción del procedimiento almacenado (haga clic para ver la imagen de tamaño completo)

Como se muestra en la ventana de inspección de la Figura 7, el valor del @CategoryID parámetro es 1. Esto se debe a que la ExistingSprocs.aspx página muestra inicialmente productos en la categoría de bebidas, que tiene un CategoryID valor de 1. Elija una categoría diferente en la lista desplegable. Al hacerlo, se produce un postback y se vuelve a ejecutar el Products_SelectByCategoryID procedimiento almacenado. Se vuelve a alcanzar el punto de interrupción, pero esta vez el valor del parámetro @CategoryID refleja el elemento seleccionado de la lista desplegable CategoryID.

Elegir una categoría diferente de la lista de Drop-Down

Figura 8: Elegir una categoría diferente de la lista de Drop-Down (haga clic para ver la imagen de tamaño completo)

La clase <span= @CategoryID parameter refleja la categoría seleccionada en la página web" />

Figura 9: El @CategoryID parámetro refleja la categoría seleccionada en la página web (haga clic para ver la imagen de tamaño completo)

Nota:

Si el punto de interrupción del Products_SelectByCategoryID procedimiento almacenado no se alcanza al visitar la página ExistingSprocs.aspx, asegúrese de que la casilla SQL Server esté marcada en la sección de Depuradores de la página de propiedades de la aplicación ASP.NET, que la agrupación de conexiones esté deshabilitada y que la opción Depuración de aplicaciones de la base de datos esté habilitada. Si sigue teniendo problemas, reinicie Visual Studio e inténtelo de nuevo.

Depuración de objetos de base de datos T-SQL en instancias remotas

La depuración de objetos de base de datos a través de Visual Studio es bastante sencilla cuando la instancia de base de datos de SQL Server está en la misma máquina que Visual Studio. Sin embargo, si SQL Server y Visual Studio residen en máquinas diferentes, se requiere cierta configuración cuidadosa para que todo funcione correctamente. Hay dos tareas principales con las que nos enfrentamos:

  • Asegúrese de que el inicio de sesión usado para conectarse a la base de datos a través de ADO.NET pertenece al sysadmin rol.
  • Asegúrese de que la cuenta de usuario de Windows usada por Visual Studio en el equipo de desarrollo es una cuenta de inicio de sesión de SQL Server válida que pertenece al sysadmin rol.

El primer paso es relativamente sencillo. En primer lugar, identifique la cuenta de usuario usada para conectarse a la base de datos desde la aplicación ASP.NET y, a continuación, desde SQL Server Management Studio, agregue esa cuenta de inicio de sesión al sysadmin rol.

La segunda tarea requiere que la cuenta de usuario de Windows que use para depurar la aplicación sea un inicio de sesión válido en la base de datos remota. Sin embargo, es probable que la cuenta de Windows con la que inició sesión en la estación de trabajo no sea un inicio de sesión válido en SQL Server. En lugar de agregar su cuenta de inicio de sesión determinada a SQL Server, una mejor opción sería designar algunas cuentas de usuario de Windows como cuenta de depuración de SQL Server. A continuación, para depurar los objetos de base de datos de una instancia remota de SQL Server, ejecutaría Visual Studio con esas credenciales de la cuenta de inicio de sesión de Windows.

Un ejemplo debe ayudar a aclarar las cosas. Imagine que hay una cuenta de Windows denominada SQLDebug dentro del dominio de Windows. Esta cuenta tendría que agregarse a la instancia remota de SQL Server como un inicio de sesión válido y como miembro del sysadmin rol. A continuación, para depurar la instancia remota de SQL Server desde Visual Studio, tendríamos que ejecutar Visual Studio como usuario SQLDebug . Para ello, se puede cerrar sesión en nuestra estación de trabajo, volver a iniciar sesión como SQLDebugy, a continuación, iniciar Visual Studio, pero un enfoque más sencillo sería iniciar sesión en nuestra estación de trabajo con nuestras propias credenciales y, a continuación, usar runas.exe para iniciar Visual Studio como usuario SQLDebug . runas.exe permite que una aplicación determinada se ejecute en el modo de una cuenta de usuario diferente. Para iniciar Visual Studio como SQLDebug, puede escribir la siguiente instrucción en la línea de comandos:

runas.exe /user:SQLDebug "%PROGRAMFILES%\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"

Para obtener una explicación más detallada sobre este proceso, consulte la guía "Hitchhiker's Guide" de William R. Vaughn sobre Visual Studio y SQL Server, Séptima edición.

Nota:

Si la máquina de desarrollo ejecuta Windows XP Service Pack 2, deberá configurar el firewall de conexión a Internet para permitir la depuración remota. En el artículo How To: Enable SQL Server 2005 Debugging (Habilitar la depuración de SQL Server 2005), se indican dos pasos: (a) En el equipo host de Visual Studio, debe agregar Devenv.exe a la lista Excepciones y abrir el puerto TCP 135; y (b) En el equipo remoto (SQL), debe abrir el puerto TCP 135 y agregar sqlservr.exe a la lista Excepciones. Si la directiva de dominio requiere que la comunicación de red se realice a través de IPSec, debe abrir los puertos UDP 4500 y UDP 500.

Resumen

Además de proporcionar soporte para la depuración del código de aplicación .NET, Visual Studio también ofrece una variedad de opciones de depuración para SQL Server 2005. En este tutorial hemos examinado dos de esas opciones: Depuración directa de bases de datos y depuración de aplicaciones. Para depurar directamente un objeto de base de datos T-SQL, busque el objeto a través del Explorador de servidores, haga clic derecho sobre él y elija Entrar. Esto inicia el depurador y se detiene en la primera instrucción del objeto de base de datos, en cuyo punto puede recorrer las instrucciones del objeto y ver y modificar los valores de parámetro. En el paso 1 usamos este enfoque para entrar en el Products_SelectByCategoryID procedimiento almacenado.

La depuración de aplicaciones permite establecer puntos de interrupción directamente dentro de los objetos de base de datos. Cuando se invoca un objeto de base de datos con puntos de interrupción desde una aplicación cliente (por ejemplo, una aplicación web de ASP.NET), el programa se detiene a medida que el depurador toma el control. La depuración de aplicaciones es útil porque muestra más claramente qué acción de aplicación hace que se invoque un objeto de base de datos determinado. Sin embargo, requiere un poco más de configuración y ajustes que la depuración directa de bases de datos.

Los objetos de base de datos también se pueden depurar a través de proyectos de SQL Server. Examinaremos el uso de proyectos de SQL Server y cómo usarlos para crear y depurar objetos de base de datos administrados en el siguiente tutorial.

¡Feliz programación!

Acerca del autor

Scott Mitchell, autor de siete libros de ASP/ASP.NET y fundador de 4GuysFromRolla.com, ha estado trabajando con tecnologías web de Microsoft desde 1998. Scott trabaja como consultor independiente, entrenador y escritor. Su último libro es Sams Teach Yourself ASP.NET 2.0 en 24 horas. Se puede contactar con él en mitchell@4GuysFromRolla.com.