Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование метода ExecuteNonQuery




Параметризированные запросы

Выше были рассмотрены основные методы объекта Command в консольных приложениях. Это дало возможность понять синтаксис самих методов, без привязки к какому-либо интерфейсу. Однако, после того как синтаксис стал ясен, возникает вопрос - как же использовать эти методы в реальных приложениях? Очевидно, что простое копирование кода в конструктор формы, по сути, не изменит пример. Следовательно, необходимо привязывать вводимые значения к элементам пользовательского интерфейса, например, к текстовым полям. Но это означает, что параметры строки запроса будут неизвестны до тех пор, пока пользователь не введет соответствующие значения. Например, для метода ExecuteNonQuery строка commandText имела следующий вид:

myCommand.CommandText =
"UPDATE Туристы SET Фамилия = 'Сергеева' WHERE Кодтуриста = 3";

Если создадим приложение, где пользователь будет вводить фамилию и код туриста, то мы не можем заранее указать, какие это будут значения. Логически запрос можно представить примерно так:

myCommand.CommandText = " UPDATE Туристы SET
Фамилия = 'Какая-то_фамилия,_которую_введет_пользователь'
WHERE Кодтуриста = 'Какой-то_код,_который_введет_пользователь' ";

Для решения таких задач, которые возникли еще в самом начале разработки языка SQL, были придуманы параметризированные запросы. В них неизвестные значения заменяются параметрами следующим образом:

myCommand.CommandText =
"UPDATE Туристы SET Фамилия = @Family WHERE Кодтуриста = @TouristID";

Здесь @Family - параметр для неизвестного значения фамилии, @TouristID - параметр для неизвестного значения кода туриста. Отметим, что параметры пишутся без кавычек.

Теперь можно выполнить привязку параметров к тексту, вводимому пользователем.

 

Для демонстрации привязки параметров создадим новое Windows- приложение и разместим на нем компоненты пользовательского интерфейса. Форма в режиме дизайна будет иметь следующий вид (рис. 87).

Рис. 87. Разработанное приложение, вид формы в режиме дизайна

Подключаем пространство имен для работы с базой данных:

using System.Data.SqlClient;

В классе формы создаем экземпляр conn:

SqlConnection conn = null;

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

private void btnUpdate_Click(object sender, System.EventArgs e) {
try {
string Family = Convert.ToString(this.txtFamilyUpdate.Text);
int TouristID = int.Parse(this.txtTouristIDUpdate.Text);
conn = new SqlConnection();
conn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" +
@"D:\BMИ\For ADO\BDTur_firmSQL2.mdf" +
"Integrated Security=True;Connect Timeout=30;User Instance=True";
conn.Open();
SqlCommand myCommand = conn.CreateCommand();
myCommand.CommandText = "UPDATE Туристы SET Фамилия = @Family WHERE [Код туриста] = @TouristID";
myCommand.Parameters.Add("@Family", SqlDbType.NVarChar, 50);
myCommand. Parameters["@Family"].Value = Family;
myCommand.Parameters.Add("@TouristID", SqlDbType.Int, 4);
myCommand. Parameters["@TouristID"].Value = TouristID;
int UspeshnoeIzmenenie = myCommand.ExecuteNonQuery();
if (UspeshnoeIzmenenie!=0) {
MessageBox.Show("Изменения внесены", "Изменение записи");
}
else {
MessageBox.Show(“Не удалось внести изменения", "Изменение записи");
}
conn.Close();
}
catch(Exception ex) {
MessageBox.Show(ex.ToString());
}
finally
{
conn.Close();
}
}

Обратим внимание на то, что в блоке finally происходит закрытие соединения, это нужно сделать в любом случае, независимо от результата выполнения команды. Значения, введенные пользователем в текстовые поля txtFamilyUpdate и txtTouristIDUpdate, помещаются в переменные Family и TouristID. В запросе к базе данных используются два параметра - @Family и @TouristID. Они добавляются в коллекцию объекта Command с помощью метода Add свойства Parameters, а затем значения параметров устанавливаются равными переменным Family и TouristID. Метод Add перегружен. Использованный в данном фрагменте кода первый вариант этого метода принимает наибольшее количество свойств. Описание некоторых свойств метода Add приводится в таблице 16.

Конструкция метода Add, свойства Parameters объекта Command для поставщика данных OLE DB имеет в точности такую же структуру.

Таблица 16. Свойства метода Add

Свойство Описание
parameterName Название параметра
sqlDbType Тип данных передаваемого параметра
size Размер параметра
sourceColumn Название имени столбца объекта DataSet, на который ссылается данный параметр

Добавим обработчик кнопки btnInsert.

private void btnInsert_Click(object sender, System.EventArgs e) {
try {
int TouristID = int.Parse(this.txtTouristIDInsert.Text);
string Family = Convert.ToString(this.txtFamilyInsert.Text);
string FirstName = Convert.ToString(this.txtFirstNameInsert.Text);
string MiddleName = Convert.ToString(this.txtMiddleNameInsert.Text);
conn = new SqlConnection();
conn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" +
@"D:\ВМИ\For ADO\BDTur_firmSQL2.mdf" +
";Integrated Security=True;Connect Timeout=30;User Instance=True";
conn.Open();
SqlCommand myCommand = conn.CreateCommand();
myCommand.CommandText = "INSERT INTO " +
"Туристы ([Код туриста], Фамилия, Имя, Отчество) " +
"VALUES (@TouristID, @Family, @FirstName, @MiddleName)";
myCommand.Parameters.Add("@TouristID", SqlDbType.Int, 4);
myCommand. Parameters["@TouristID"].Value = TouristID;
myCommand.Parameters.Add("@Family", SqlDbType.NVarChar, 50);
myCommand. Parameters["@Family"].Value = Family;
myCommand.Parameters.Add("@FirstName", SqlDbType.NVarChar, 50);
myCommand. Parameters["@FirstName"].Value = FirstName;
myCommand.Parameters.Add("@MiddleName", SqlDbType.NVarChar, 50);
myCommand. Parameters["@MiddleName"].Value = MiddleName;
int UspeshnoeIzmenenie = myCommand.ExecuteNonQuery();
if (UspeshnoeIzmenenie!=0) {
MessageBox.Show("Изменения внесены", "Изменение записи");
}
else {
MessageBox.Show(“Не удалось внести изменения", "Изменение записи");
}
}
catch(Exception ex) {
MessageBox.Show(ex.ToString());
}
finally {
conn.Close();
}
}

В запросе используются четыре параметра: @TouristID, @Family, @FirstName, @MiddleName. Тип данных создаваемых параметров соответствует типу данных полей таблицы «Туристы» в базе.

Добавим обработчик кнопки btnDelete.

private void btnDelete_Click(object sender, System.EventArgs e) {
try {
int TouristID = int.Parse(this.txtTouristIDDelete.Text);
conn = new SqlConnection();
conn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" +
@"D:\ВМИ\For ADO\BDTur_firmSQL2.mdf" +
"integrated Security=True;Connect Timeout=30;User Instance=True";
conn.Open();
SqlCommand myCommand = conn.CreateCommand();
myCommand.CommandText = "DELETE FROM Туристы" +
"WHERE [Код туриста] = @TouristID";
myCommand.Parameters.Add("@TouristID", SqlDbType.Int, 4);
myCommand. Parameters["@TouristID"].Value = TouristID;
int UspeshnoeIzmenenie = myCommand.ExecuteNonQuery();
if (UspeshnoeIzmenenie!=0) {
MessageBox.Show("Изменения внесены", "Изменение записи");
}
else {
MessageBox.Show(“Не удалось внести изменения", "Изменение записи");
}
}
catch(Exception ex) {
MessageBox.Show(ex.ToString());
}
finally {
conn.Close();
}
}

Запускаем приложение. В каждой из групп заполняем поля, затем нажимаем на кнопки. Проверять результат можно, запуская Management Studio и просматривая каждый раз содержимое таблицы «Туристы» (рис. 88 - 90).

Рис. 88. Пример обновления

Рис. 89. Пример удаления

Рис. 90. Пример добавления




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 457; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.