Поделиться через


Как выполнить отладку многоуровневых приложений баз данных

Этот раздел применим для следующих версий:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional

Visual Studio Express

ms165062.DoesApplybmp(ru-ru,VS.100).gif ms165062.DoesApplybmp(ru-ru,VS.100).gif ms165062.DoesApplybmp(ru-ru,VS.100).gif ms165062.DoesNotApplybmp(ru-ru,VS.100).gif

В этом разделе приведен образец кода, на примере которого демонстрируется отладка многоуровневого приложения базы данных, а также описываются действия, которые необходимо предпринять для перехода во время отладки из кода приложения, находящегося в клиентском приложении или приложении среднего уровня в код Transact-SQL объекта базы данных, работающего на экземпляре SQL Server, начиная с версии SQL Server 2005.

Для перехода между уровнем приложения и уровнем базы данных необходимо установить точки останова на целевом уровне. В противном случае при попытке перейти на этот уровень код просто будет выполнен без остановки.Однако для переходов между Transact-SQL и кодом SQL CLR на уровне базы данных точки останова не требуются.

В следующем примере для демонстрации перехода между C# и Transact-SQL используется приложение командной строки на C#, таблица базы данных SQL Server с именем Currency и две хранимые процедуры.Цель этого примера состоит в иллюстрации переходов, пример не является реальным.

Имена двух хранимых процедур:

  • DeleteCurrency является хранимой процедурой Transact-SQL, которая удаляет валюту с указанным кодом;

  • DeleteCurrencyDriver также является хранимой процедурой Transact-SQL.Она вызывает предыдущую хранимую процедуру с входным параметром, указывающим код валюты, которую требуется удалить.

Код приложения вызывает обе хранимые процедуры, передавая им в качестве параметра код валюты.Хранимая процедура без суффикса «Driver» вызывается из двух разных мест: из процедуры DeleteCurrencyDriver и непосредственно из приложения.В первом случае из процедуры DeleteCurrencyDriver можно будет перейти в другие хранимые процедуры нажатием кнопки Шаг с заходом.При вызове этих хранимых процедур из приложения перейти в них непосредственно будет невозможно, внутри этих хранимых процедур нужно будет устанавливать точки останова.

Создание объектов Transact-SQL базы данных для демонстрации этого

  1. В базе данных SQL Server 2005 или более поздней версии с помощью кода из первого примера создайте таблицу Currency и две хранимые процедуры.

    1. Откройте редактор Transact-SQL в среде Visual Studio и подключитесь к базе данных, которая используется для этой демонстрации.Дополнительные сведения см. в разделах Как запустить редактор Transact-SQL и Как подключиться к базе данных в редакторе Transact-SQL.

    2. Скопируйте код Transact-SQL из первого примера и вставьте его в редактор Transact-SQL.

    3. Замените <database> на соответствующее имя базы данных и на панели инструментов редактора Transact-SQL нажмите кнопку Выполнить SQL.

  2. Если редактор Transact-SQL был открыт в контексте проекта базы данных или сервера SQL Server, то перед тем, как продолжить, закройте этот проект.В противном случае редактор Transact-SQL можно оставить открытым и продолжить.

Подготовка обозревателя серверов для многоуровневой отладки

  1. Удостоверьтесь, что отладка Transact-SQL для компьютера включена.Дополнительные сведения см. в разделе Как включить отладку Transact-SQL.

  2. Откройте Обозреватель серверов, выбрав в меню ВидОбозреватель серверов.

  3. В Обозревателе серверов создайте новое подключение к данным, щелкнув правой кнопкой мыши Соединенияк данным и выбрав Добавить соединение.Откроется диалоговое окно Добавить соединение.

  4. Создайте подключение к базе данных, в которой была создана таблица Currency.Важно, чтобы имя входа, используемое этим соединением, было членом предопределенной роли сервера sysadmin.Дополнительные сведения см. в разделе Как подключиться к базе данных с помощью обозревателя серверов.

  5. Создав новое подключение к данным, найдите его в узле Подключения к данным.

  6. Щелкните новое подключение к данным правой кнопкой мыши и выберите команду Отладка приложения.Будет включена многоуровневая отладка базы данных, указанной в подключении.

Подготовка приложения командной строки на C# для многоуровневой отладки

  1. В том же экземпляре среды Visual Studio, в котором был подготовлен Обозреватель серверов, подготовьте приложение командной строки на C#, которое будет выполнять хранимые процедуры DeleteCurrencyDriver и DeleteCurrency.

    1. Откройте новое консольное приложение C#, выбрав меню Файл, а затем Создать проект.

    2. Скопируйте код на C# из второго примера и замените им весь код в файле Program.cs, созданном проектом.

  2. В свойствах консольного приложения на вкладке Отладка установите флажок Включить отладку SQL Server.Это позволит выполнять многоуровневую отладку этого консольного приложения.Дополнительные сведения см. в разделе Как включить отладку Transact-SQL для проекта на C++, Visual Basic или C#.

Отладка многоуровневого приложения командной строки

  1. В коде на C# (файл Program.cs) установите точки останова до и после каждого вызова хранимой процедуры.

  2. Установите точки останова в хранимых процедурах.Примечание. Войти в код Transact-SQL из кода на C# нельзя, однако можно осуществлять переход между объектами базы данных SQL Server.

    1. В Обозревателе серверов найдите новые хранимые процедуры в новом подключении к данным.

    2. Щелкните хранимую процедуру DeleteCurrency правой кнопкой мыши и выберите команду Открыть.При этом запустится окно редактора Transact-SQL с кодом хранимой процедуры DeleteCurrency.Установите точку останова в строке SET NOCOUNT ON, щелкнув серую область в левой части редактора.

    3. Щелкните хранимую процедуру DeleteCurrencyDriver правой кнопкой мыши и выберите команду Открыть.При этом запустится окно редактора Transact-SQL с кодом хранимой процедуры DeleteCurrencyDriver.Установите точку останова в строке SET NOCOUNT ON, щелкнув серую область в левой части редактора.

  3. Запустите приложение, нажав клавишу F5.

  4. Пройдите по разным модулям.

  5. Попытайтесь удалить некоторые точки останова, чтобы посмотреть, что произойдет при попытке перехода между разными уровнями и языками.

  6. Чтобы завершить отладку, удалите все точки останова из меню Отладка среды Visual Studio и нажмите клавишу F5.

Пример

В этом разделе приведен код Transact-SQL, который создает таблицу Currency и две хранимые процедуры: DeleteCurrency и DeleteCurrencyDriver. Замените <database> на имя соответствующей базы данных.

USE <database>
GO
CREATE TABLE Currency
(CurrencyCode nvarchar(1))

INSERT Currency 
VALUES (N'A'),(N'B'),(N'C'),(N'D')

SELECT * FROM Currency 
GO

CREATE PROCEDURE dbo.DeleteCurrency
    (
        @CurrencyCode nvarchar(3)
    )
AS
    SET NOCOUNT ON
    DELETE Currency 
      WHERE CurrencyCode = @currencyCode 
    RETURN
GO

CREATE PROCEDURE dbo.DeleteCurrencyDriver
    (
        @CurrencyCode nvarchar(3)
    )
AS
    SET NOCOUNT ON
    EXECUTE DeleteCurrency @CurrencyCode 
    RETURN
GO

В этом разделе приведен код приложения командной строки на C#, вызывающего хранимые процедуры DeleteCurrencyDriver и DeleteCurrency.Замените <server> и <database> на имена экземпляра и базы данных, где находится таблица Currency соответственно.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
            builder.DataSource = <server>;
            builder.IntegratedSecurity = true;
            builder.InitialCatalog = <database>;
 
            SqlConnection SqlConnection1 = new SqlConnection(builder.ConnectionString);
            SqlConnection1.Open();
 
            SqlCommand procCommand = new SqlCommand();
            procCommand.CommandText = "DeleteCurrencyDriver";
            procCommand.CommandType = CommandType.StoredProcedure;
            procCommand.Connection = SqlConnection1;

            // Fill parameters collection for the stored procedure.SqlParameter workParam = null;
            workParam = procCommand.Parameters.Add("@CurrencyCode", SqlDbType.NChar, 1);
            procCommand.Parameters["@CurrencyCode"].Value = "B";
            
            try { procCommand.ExecuteNonQuery(); }
            catch (SqlException e) { Console.WriteLine(e.Message); }
 
            //Execute DeleteCurrency stored procedure directly
            procCommand.CommandText = "DeleteCurrency";
            try { procCommand.ExecuteNonQuery(); }
            catch (SqlException e) { Console.WriteLine(e.Message); }
 
            SqlConnection1.Close();
            Console.WriteLine("Press any key to close...");
            Console.Read();
        }
    }
}

См. также

Задания

Как включить отладку Transact-SQL для проекта на C++, Visual Basic или C#

Как включить многоуровневую отладку

Как включить отладку Transact-SQL