Технология Microsoft ADO.NET

       

Вызов хранимых процедур с входными и выходными параметрами


На практике наиболее часто используются хранимые процедуры с входными и выходными параметрами (см. таблицу 5.3). Создайте новое приложение и назовите его "VisualOutputParameter". Устанавливаем следующие свойства формы:

Form1, форма, свойствоЗначение
FormBorderStyleFixedSingle
MaximizeBoxFalse
Size400; 96

Добавляем на форму элементы управления и устанавливаем их свойства:

textBox1, свойствоЗначение
NametxtTouristID
Location15; 20
Size120; 20
TextВведите код туриста
label1, свойствоЗначение
NamelblFamily
Location151; 20
Size144; 23
Text
button1, свойствоЗначение
NamebtnRun
Location303; 20
TextЗапуск

Переходим на вкладку Server Explorer, раскрываем узел Stored Procedures базы данных BDTur_firm2 и перетаскиваем процедуру proc_po1. Выделяем появившейся объект sqlCommand1, в окне Properties нажимаем на кнопку

(...) для перехода к редактору SqlParameter Collection Editor. Среда сгенерировала три параметра - @RETURN_VALUE, @TouristID, @LastName (рис. 7.4):


увеличить изображение
Рис. 7.4.  Приложение VisualOutputParameter. Свойство Parameters объекта sqlCommand1

Сообщение об успешности выполнения команды возвращается при помощи параметра @RETURN_VALUE, значение которого для запроса данной хранимой процедуры будет равно нулю. Для процедур, содержащих запросы UPDATE, INSERT и DELETE, возвращаемое значение будет равно числу измененных записей. Обратите внимание, в тексте процедуры мы не создавали этот параметр - среда сгенерировала его автоматически! Два последних параметра были определены при создании хранимой процедуры. Подключаем пространство имен для работы с базой:

using System.Data.SqlClient;

В обработчике кнопки btnRun выводим фамилию искомого туриста в качестве текста надписи:

private void btnRun_Click(object sender, System.EventArgs e) { try { int TouristID = int.Parse(this.txtTouristID.Text); sqlCommand1.Parameters["@TouristID"].Value = TouristID; sqlConnection1.Open(); sqlCommand1.ExecuteScalar(); lblFamily.Text = Convert.ToString(sqlCommand1.Parameters["@LastName"].Value); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { sqlConnection1.Close(); } }


Запускаем приложение. Если в таблице имеется фамилия, соответствующая заданному коду, она выводится на форму (рис. 7.5):


Рис. 7.5.  Готовое приложение VisualOutputParameter

При использовании визуальных средств код в обработчике ничем не отличается от рассматриваемого ранее - мы нигде не указывали значение output параметра @LastName. Дело в том, что среда сама настроила это значение в свойстве Direction (см. рис. 7.4). При программном вызове хранимой процедуры нам придется определять его вручную. Скопируйте папку приложения VisualOutputParameter и переименуйте ее в "ProgrammOutputParameter". Открываем проект, удаляем все объекты с панели компонент формы. В классе формы создаем объект Connection:

SqlConnection conn = null;

Обработчик кнопки btnRun принимает следующий вид:

private void btnRun_Click(object sender, System.EventArgs e) { try { conn = new SqlConnection(); conn.ConnectionString = "integrated security=SSPI;data source=\".\"; persist security info=False; initial catalog=BDTur_firm2"; SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandType = CommandType.StoredProcedure; myCommand.CommandText = "[proc_po1]"; int TouristID = int.Parse(this.txtTouristID.Text); myCommand.Parameters.Add("@TouristID", SqlDbType.Int, 4); myCommand.Parameters["@TouristID"].Value = TouristID; //Необязательная строка, т.к. совпадает со значением по умолчанию. //myCommand.Parameters["@TouristID"].Direction = ParameterDirection.Input; myCommand.Parameters.Add("@LastName", SqlDbType.NVarChar, 60); myCommand.Parameters["@LastName"].Direction = ParameterDirection.Output; conn.Open(); myCommand.ExecuteScalar(); lblFamily.Text = Convert.ToString (myCommand.Parameters["@LastName"].Value); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { conn.Close(); } }

Мы добавили параметр @LastName в набор Parameters, причем его значение output указали в свойстве Direction:



myCommand.Parameters["@LastName"].Direction = ParameterDirection.Output;

Параметр @ TouristID является исходным, поэтому для него в свойстве Direction указывается Input. Поскольку это является значением по умолчанию для всех параметров набора Parameters, указывать его явно не нужно. Перечисление ParameterDirection принимает еще два значения - InputOutput и ReturnValue (рис. 7.6).


Рис. 7.6.  Значения перечисления ParameterDirection

Для параметров, работающих в двустороннем режиме, устанавливается значение InputOutput, для параметров, возвращающих данные о выполнения хранимой процедуры, - ReturnValue. Примером последнего может служить @RETURN_VALUE (см. рис. 7.4).

В программном обеспечении к курсу вы найдете приложения Visual OutputParameter и ProgrammOutputParameter (Code\Glava3 \VisualOutput Parameter и ProgrammOutputParameter).


Содержание раздела