Member 10627757 Ответов: 1

Как обновить gridview


У меня есть 2 формы, форма а имеет текстовые поля, которые добавляют данные в базу данных Mysql.

Форма B включает в себя flexgrid.

Когда я редактирую строку в flexgrid, она открывает форму A, но когда я сохраняю ее, она создает другую запись. Я хочу, чтобы он обновил существующую запись. На кнопку Сохранить у меня

private void lnkSave_Click(object sender, EventArgs e)
        {
             string constring = "datasource=127.0.0.1;Port=3306;Database=bpos;username=root;password=Pass";
            string Query = "insert into bpos.patchtest (Description,Employee,MemberID,Results,Date) values('" + this.txtDescription.Text + "','" + this.cmbEmployee.Text + "','" + this.txtRefNo2.Text + "','" + Results + "','" + this.metroDateTime1.Text + "') ;";
    
            MySqlConnection conDataBase = new MySqlConnection(constring);
             MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
              MySqlDataReader myReader;
             try
             {
               conDataBase.Open();
              myReader = cmdDataBase.ExecuteReader();
               MessageBox.Show("Saved");
               
               while (myReader.Read())
                {

                 }

              }
             catch (Exception ex)
               {

                   MessageBox.Show(ex.Message);
               }
              }


Я не хочу создавать кнопку обновления. Можно ли обновить его с помощью кнопки "Сохранить" выше?

Что я уже пробовал:

Я попытался использовать кнопку обновления, но я действительно не хочу использовать другую кнопку.

[no name]

"Возможно ли это", да, возможно.

1 Ответов

Рейтинг:
2

OriginalGriff

Да, но сначала не делай этого так! Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Вы можете изменить строки, просто выполнив запрос обновления вместо вставки: вставка всегда создает новую строку, обновление только когда-либо изменяет существующие строки.
Грубый синтаксис таков:

UPDATE MyTable SET MyColumn = MyNewValue, MyOtherColumn = MyOtherNewValue WHERE MyROwIDColumn=TheIDOfTheColumnToChange


Кстати, сделайте себе одолжение: команды INSERT и UPDATE не возвращают никаких данных строк - так что использование DataReader бессмысленно. Вместо этого эти команды должны выполняться с помощью ExecuteNonQuery,который возвращает количество вставленных или измененных строк.

А если серьезно: пройдите весь свой код и избавьтесь от конкатенации строк-это действительно опасно!


Member 10627757

Я совершенно новичок в c# и слежу за видео на youtube, и именно так он это делает. Спасибо за ваш совет, и я буду читать дальше. Когда вы говорите никогда не связывать строки не могли бы вы привести мне пример того как это должно выглядеть

OriginalGriff

Не следите за видео на YouTube - большинство из них созданы людьми, которые знают очень мало больше, чем вы, и они обычно пропускают огромные куски, которые вам действительно нужны! Возьмите книгу или лучше пройдите курс - и то, и другое познакомит вас со всем необходимым в структурированном виде. И делайте все упражнения: вы" фиксируете " вещи в своем уме лучше, делая, чем читая.
Посмотрите на это: это объясняет, почему и как параметризовать запросы.

http://www.codeproject.com/Articles/837599/Using-Csharp-to-connect-to-and-query-from-a-SQL-da

Member 10627757

UPDATE MyTable SET MyColumn = MyNewValue, MyOtherColumn = MyOtherNewValue WHERE MyROwIDColumn=TheIDOfTheColumnToChange



Обновление добавит данные в базу данных Mysql, если запись не существует. Эта форма также используется для вставки новых данных.