| Украина, Киев |
Свойства и методы объекта 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();
}
}
