Свойства и методы объекта Command
Применение методов объекта Command в Windows-приложениях. Параметризированные запросы
Мы рассмотрели основные методы объекта 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-приложение и назовите его "ExamWinExecuteNonQuery". Устанавливаем следующие свойства формы:
Добавляем на форму элементы управления и устанавливаем их свойства:
textBox1, свойство | Значение |
---|---|
Name | TxtTouristIDUpdate |
Location | 16; 24 |
Size | 224; 20 |
Text | Введите код туриста |
textBox2, свойство | Значение |
---|---|
Name | TxtFamilyUpdate |
Location | 16; 56 |
Size | 224; 20 |
Text | Введите фамилию туриста |
textBox3, свойство | Значение |
---|---|
Name | TxtTouristIDInsert |
Location | 16; 24 |
Size | 224; 20 |
Text | Введите код туриста |
textBox4, свойство | Значение |
---|---|
Name | TxtFamilyInsert |
Location | 16; 56 |
Size | 224; 20 |
Text | Введите фамилию туриста |
textBox5, свойство | Значение |
---|---|
Name | TxtFirstNameInsert |
Location | 16; 88 |
Size | 224; 20 |
Text | Введите имя туриста |
textBox6, свойство | Значение |
---|---|
Name | TxtMiddleNameInsert |
Location | 16; 120 |
Size | 224; 20 |
Text | Введите отчество туриста |
textBox7, свойство | Значение |
---|---|
Name | txtTouristIDDelete |
Location | 8; 24 |
Size | 192; 20 |
Text | Введите код туриста для удаления |
Форма в режиме дизайна будет иметь следующий вид (рис. 6.22):
Подключаем пространство имен для работы с базой данных:
using System.Data.SqlClient;
В классе формы создаем экземпляр conn7Мы это делаем для включения блока обработки исключений.:
SqlConnection conn = null;
Обработчик кнопки btnUpdate будет иметь следующий вид:
private void btnUpdate_Click(object sender, System.EventArgs e) { try { //Создаем переменную Family, в которую помещаем значение, //введенное пользователем в поле txtFamilyUpdate: string Family = Convert.ToString(this.txtFamilyUpdate.Text); //Создаем переменную TouristID, в которую помещаем значение, //введенное пользователем в поле txtTouristIDUpdate: int TouristID = int.Parse(this.txtTouristIDUpdate.Text); conn = new SqlConnection(); conn.ConnectionString = "integrated security=SSPI;data source=\".\"; persist security info=False; initial catalog=BDTur_firm2"; conn.Open(); SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandText = "UPDATE Туристы SET Фамилия = @Family WHERE Кодтуриста = @TouristID"; //Добавляем параметр @Family в коллекцию параметров //объекта myCommand myCommand.Parameters.Add("@Family", SqlDbType.NVarChar, 50); //Устанавливаем значение параметра @Family //равным значению переменной Family myCommand.Parameters["@Family"].Value = Family; //Добавляем параметр @TouristID в коллекцию параметров //объекта myCommand myCommand.Parameters.Add("@TouristID", SqlDbType.Int, 4); //Устанавливаем значение параметра @TouristID //равным значению переменной TouristID 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(); } }