Курсовая работа: Разработка баз данных "Articles" средствами платформы Microsoft.NET Framework

MessageBox.Show(ex.Message, "Ошибка");}

После обновления содержимого базы данных метод AddNode закрывает соединение с базой данных SqlConnection1.Close();.

3.5.2 Использование хранимых процедур

Прежде всего, моя программа вызывает хранимую процедуру sp_InsertNode, предназначенную для добавления новой строки в таблицу Tree, хранящую структуру дерева. Напомню, что этой процедуре нужно передать через входные параметры идентификатор родительского узла @parent_id, заголовок статьи @title и вес сортировки @weight.

Вызов хранимой процедуры начинается с создания объекта класса SqlCommand:

SqlCommand cmd = new SqlCommand("sp_InsertNode",sqlConnection1);

cmd.CommandType = CommandType.StoredProcedure;

Далеепрограммадолжназадатьтипкомандывсвойстве CommandType ввидеконстанты CommandType.StoredProcedure: cmd.CommandType.

Это означает, что команда содержит не строку SQL, а имя хранимой процедуры.

На следующем этапе необходимо добавить параметры хранимой процедуры. Наша хранимая процедура sp_InsertNode имеет три входных и один выходной параметр.

Через выходной параметр со специальным именем RETURN_VALUE хранимая процедура возвращает идентификатор добавленной строки:

SqlParameter param = cmd.Parameters.Add("RETURN_VALUE",SqlDbType.Int);

В качестве первого параметра методу Add передается имя параметра хранимой процедуры, а в качестве второго — тип данных, соответствующих этому параметру.

Чтобы указать, что этот параметр является выходным, я записываю константу ParameterDirection.ReturnValue в свойство параметра с именем Direction:

param.Direction = ParameterDirection.ReturnValue;

Если этого не сделать, то по умолчанию параметр будет входным.

Вот как я указываю входные параметры для хранимой процедуры sp_InsertNode:

cmd.Parameters.Add("@parent_id", SqlDbType.Int).Value = id;

cmd.Parameters.Add("@title", SqlDbType.VarChar).Value =dialog.Title;

cmd.Parameters.Add("@weight", SqlDbType.Int).Value =dialog.Weight;

Следует отметить, что тип числовых данных указан как SqlDbType.Int, а тип строчных данных — как SqlDbType.VarChar.

Параметру хранимой процедуры @parent_id я присваиваю значение идентификатора родительского узла, который передается при вызове методу AddNode. Что же касается параметров @title и @weight, то для их инициализации я извлекаю значения из свойств Title и Weight, определенных мною в классе Form2 диалогового окна ввода данных узла.

Для запуска хранимой процедуры на выполнение вызывается метод ExecuteNonQuery:

cmd.ExecuteNonQuery();

Если у хранимой процедуры имеются параметры (как в моём случае), то их необходимо подготовить. Иначе при выполнении метода ExecuteNonQuery возникнет необработанное исключение.

После того как хранимая процедура завершит свою работу, программа может получить значение ее выходных параметров при помощи свойства Value.

Вот как я извлекаю значение, возвращаемое хранимой процедурой sp_InsertNode:

int tree_id = (int)cmd.Parameters["RETURN_VALUE"].Value;

К-во Просмотров: 266
Бесплатно скачать Курсовая работа: Разработка баз данных "Articles" средствами платформы Microsoft.NET Framework