Как выполнить отладку многоуровневых приложений баз данных
Этот раздел применим для следующих версий:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
В этом разделе приведен образец кода, на примере которого демонстрируется отладка многоуровневого приложения базы данных, а также описываются действия, которые необходимо предпринять для перехода во время отладки из кода приложения, находящегося в клиентском приложении или приложении среднего уровня в код 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 базы данных для демонстрации этого
В базе данных SQL Server 2005 или более поздней версии с помощью кода из первого примера создайте таблицу Currency и две хранимые процедуры.
Откройте редактор Transact-SQL в среде Visual Studio и подключитесь к базе данных, которая используется для этой демонстрации.Дополнительные сведения см. в разделах Как запустить редактор Transact-SQL и Как подключиться к базе данных в редакторе Transact-SQL.
Скопируйте код Transact-SQL из первого примера и вставьте его в редактор Transact-SQL.
Замените <database> на соответствующее имя базы данных и на панели инструментов редактора Transact-SQL нажмите кнопку Выполнить SQL.
Если редактор Transact-SQL был открыт в контексте проекта базы данных или сервера SQL Server, то перед тем, как продолжить, закройте этот проект.В противном случае редактор Transact-SQL можно оставить открытым и продолжить.
Подготовка обозревателя серверов для многоуровневой отладки
Удостоверьтесь, что отладка Transact-SQL для компьютера включена.Дополнительные сведения см. в разделе Как включить отладку Transact-SQL.
Откройте Обозреватель серверов, выбрав в меню ВидОбозреватель серверов.
В Обозревателе серверов создайте новое подключение к данным, щелкнув правой кнопкой мыши Соединенияк данным и выбрав Добавить соединение.Откроется диалоговое окно Добавить соединение.
Создайте подключение к базе данных, в которой была создана таблица Currency.Важно, чтобы имя входа, используемое этим соединением, было членом предопределенной роли сервера sysadmin.Дополнительные сведения см. в разделе Как подключиться к базе данных с помощью обозревателя серверов.
Создав новое подключение к данным, найдите его в узле Подключения к данным.
Щелкните новое подключение к данным правой кнопкой мыши и выберите команду Отладка приложения.Будет включена многоуровневая отладка базы данных, указанной в подключении.
Подготовка приложения командной строки на C# для многоуровневой отладки
В том же экземпляре среды Visual Studio, в котором был подготовлен Обозреватель серверов, подготовьте приложение командной строки на C#, которое будет выполнять хранимые процедуры DeleteCurrencyDriver и DeleteCurrency.
Откройте новое консольное приложение C#, выбрав меню Файл, а затем Создать проект.
Скопируйте код на C# из второго примера и замените им весь код в файле Program.cs, созданном проектом.
В свойствах консольного приложения на вкладке Отладка установите флажок Включить отладку SQL Server.Это позволит выполнять многоуровневую отладку этого консольного приложения.Дополнительные сведения см. в разделе Как включить отладку Transact-SQL для проекта на C++, Visual Basic или C#.
Отладка многоуровневого приложения командной строки
В коде на C# (файл Program.cs) установите точки останова до и после каждого вызова хранимой процедуры.
Установите точки останова в хранимых процедурах.Примечание. Войти в код Transact-SQL из кода на C# нельзя, однако можно осуществлять переход между объектами базы данных SQL Server.
В Обозревателе серверов найдите новые хранимые процедуры в новом подключении к данным.
Щелкните хранимую процедуру DeleteCurrency правой кнопкой мыши и выберите команду Открыть.При этом запустится окно редактора Transact-SQL с кодом хранимой процедуры DeleteCurrency.Установите точку останова в строке SET NOCOUNT ON, щелкнув серую область в левой части редактора.
Щелкните хранимую процедуру DeleteCurrencyDriver правой кнопкой мыши и выберите команду Открыть.При этом запустится окно редактора Transact-SQL с кодом хранимой процедуры DeleteCurrencyDriver.Установите точку останова в строке SET NOCOUNT ON, щелкнув серую область в левой части редактора.
Запустите приложение, нажав клавишу F5.
Пройдите по разным модулям.
Попытайтесь удалить некоторые точки останова, чтобы посмотреть, что произойдет при попытке перехода между разными уровнями и языками.
Чтобы завершить отладку, удалите все точки останова из меню Отладка среды 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#