Тот же код напишем для события FormClosed для Form1.



private void Form1_FormClosed(object sender, FormClosedEventArgs e)

   {

       if (SqlConnection != null && SqlConnection.State != ConnectionState.Closed)//не закрыть ли оно уже

           SqlConnection.Close();

}

12)  Запустим наше приложение. Должно получится таким образом заполненная форма:

13)  На закладке INSERT создадим возможность добавления записей в таблицу Products БД. При добавлении новых записей не добавляем ID, ключевое поле при добавлении новой записи добавляется автоматически. Нам нужно добавить два поля: Имя продукта и Цена. Соединение с БД создается при загрузке формы, поэтому мы пишем только команды.  На кнопку button1 напишем событие Click. Добавим поле для ввода label для того, чтобы выводить туда ошибку, если одно из значений для ввода не будет введено. Для текста ошибки установите цвет шрифта красный, кегль 9, visible поставим false (чтобы при правельном вводе данных окна для сообщений видно не было, информация будет появляться только при ошибке ввода данных).
Поэтому перед добавлением данных в БД проверим, все ли заполнено. !string.IsNullOrEmpty (textBox1.Text) проверяет не пустое ли поле, ! – указывает на инверсию.

!string.IsNullOrWhiteSpace(textBox1.Text)) – является строка пустой или состоящей из разделителей. Если все заполнено выполняет блок команд внутри {}, если какое-то поле не заполнено, то в label6 выведем сообщение. В блоке команд запишем SQL код для ввода данных из полей ввода textbox. обратимся к свойству Parameters и вызовем метод AddWithValue (добавми со значением), где "Price" - ключ, значение textBox2. В этом же блоке предусмотрим синхронное выполнение команд, в методе в скобках не записываем параметры, так как в команде Execute, нам не обратного ответа не требуется.

       }

private async void button1_Click(object sender, EventArgs e)

   {

       if (label6.Visible) //если label6.Visible = true

           label6.Visible = false;

      if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrWhiteSpace(textBox1.Text) &&

           !string.IsNullOrEmpty(textBox2.Text) && !string.IsNullOrWhiteSpace(textBox2.Text))

       {

       SqlCommand command = new SqlCommand("INSERT INTO [Products] (Name, Price) VALUES(@Name, @Price)", SqlConnection);

       command.Parameters.AddWithValue("Name", textBox1.Text); //обратимся к свойству Parametersи вызовем метод AddWithValue (добавми со значением)

       command.Parameters.AddWithValue("Price", textBox2.Text);// "Price" - ключ, значение textBox2

           await command.ExecuteNonQueryAsync();//для синхронного выполнения команд, тк Execute, нам не обратного ответа не нужно

       }

       else

       {

           label6.Visible = true;

           label6.Text = "Поля 'Имя' и 'Цена' должны быть заполнены!"

       }

   }

14)  Для перезагрузки таблицы, чтобы вновь введенные данные отобразились в закладке SELECT, введен в наше меню еще один раздел Инструменты и в нем подраздел Обновить. Для подраздела Обновить запишем код:

private async void обновитьToolStripMenuItem_Click(object sender, EventArgs e)

   {

       listBox1.Items.Clear();

 

       SqlDataReader SqlReader = null;//объявили объект класса, SqlDataReader позволяет получать данные в табличном представлении

       SqlCommand command = new SqlCommand("SELECT * FROM [Products]", SqlConnection);//SqlConnection - куда посылать запрос

       try

       {

       SqlReader = await command.ExecuteReaderAsync();//объекту класса присваивает значение которое будет возвращено из метода, который мы вызовем на экземпляре класса SqlCommand

           while (await SqlReader.ReadAsync())//для проверки всей считанной информации мы должны использовать метод ReaderAsyn, вызванный на экземпляре SqlReader

           {//в этом цикле будем заполнять ListBox элементами из БД

               listBox1.Items.Add(Convert.ToString(SqlReader["Id"]) + " " + Convert.ToString(SqlReader["Name"]) + " " + Convert.ToString(SqlReader["Price"]));

           }

       }

       catch (Exception ex)

       {

       MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);

       }

       finally //проверяется в любом случае, если пустой, то закрывается

       {

           if (SqlReader != null)

               SqlReader.Close();

       }

   }

15)  Перейдем на вкладку UPDATE, напишем код для того, чтобы информацию можно было обновлять. Два раза щелкнем по кнопке Изменить. Сначала проверим наличие идентификатора и не пустые ли окна ввода. Добавим поле label7 для вывода ошибки. На кнопку Изменить напишем следующий код:

 

  private async void button2_Click(object sender, EventArgs e)

   {

   if (label7.Visible) //если label6.Visible = true

           label7.Visible = false;

   if (!string.IsNullOrEmpty(textBox3.Text) && !string.IsNullOrWhiteSpace(textBox3.Text) &&

       !string.IsNullOrEmpty(textBox4.Text) && !string.IsNullOrWhiteSpace(textBox4.Text) &&

       !string.IsNullOrEmpty(textBox5.Text) && !string.IsNullOrWhiteSpace(textBox5.Text))//не пустые ли поля

       {//команды для обновления данных о продукте, для этого воспользуемся классом SqlCommand.SqlConnection передает соединение в виде параметра

           SqlCommand command = new SqlCommand("UPDATE [Products] SET [Name]=@Name, [Price]=@Price WHERE [Id]=@Id", SqlConnection);

 

           command.Parameters.AddWithValue("Id", textBox5.Text);

           command.Parameters.AddWithValue("Name", textBox4.Text);

           command.Parameters.AddWithValue("Price", textBox3.Text);

 

           await command.ExecuteNonQueryAsync(); //нам не требуется возвращаемых значений

       }

  else if (string.IsNullOrEmpty(textBox5.Text) &&            !string.IsNullOrWhiteSpace(textBox5.Text))

       {

        label7.Visible = true;

        label7.Text = "ID должен быть заполнен!";

       }

       else

       {

        label7.Visible = true;

        label7.Text = "Поля 'Id', 'Имя' и 'Цена' должны быть заполнены!";

       }

   }

}

 

 

 

 

16)  Для удаления элементов напишем код для кнопки на закладке DELETE. Установим lebel для вывода сообщения об ошибке.   private async void button3_Click(object sender, EventArgs e)

   {

       if (label9.Visible) //если label9.Visible = true

           label9.Visible = false;

 

       if (!string.IsNullOrEmpty(textBox8.Text) && !string.IsNullOrWhiteSpace(textBox8.Text))

       {

           SqlCommand command = new SqlCommand("DELETE FROM [Products] WHERE [Id]=@Id", SqlConnection);// создаем экземпляр класса SqlCommand

           command.Parameters.AddWithValue("Id", textBox8.Text);

           await command.ExecuteNonQueryAsync();

       }

       else

           label9.Text = "ID должен быть заполнен!";

 

   }

 


Дата добавления: 2021-06-02; просмотров: 63; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!