Member 13550326 Ответов: 1

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


когда я редактирую запись со следующим кодом
Try
    If EditClick = True Then
        SqlQuery = "update Ledgers set Name = '" & TxtName.Text & "',Grp = '" & CmbGrp.Text & "',Add1= '" & TxtAdd1.Text & "',Add2= '" & TxtAdd2.Text & "',City = '" & CmbCity.Text & "',Dist ='" & TxtDist.Text & "',Pincode ='" & TxtPIN.Text & "',State ='" & DBState.Text & "',Email ='" & TxtEmail.Text & "',Landline ='" & TxtPhone.Text & "',Mobile ='" & TxtMob.Text & "',VATNO ='" & TxtVAT.Text & "',CSTNO ='" & TxtCST.Text & "',GSTNO = '" & TxtGST.Text & "',PAN ='" & TxtPAN.Text & "' where cust_id = '" & TxtCustID.Text & "'"
        Sqlcommand = New MySqlCommand(SqlQuery, Conn)
        Reader = Sqlcommand.ExecuteReader
        Reader.Close()

    Else
        SqlQuery = "insert into Ledgers (Name,Grp,Add1,Add2,City,Dist,Pincode,State,Email,Landline,Mobile,VATNO,CSTNO,GSTNO,PAN) values ('" & TxtName.Text & "' , '" & CmbGrp.Text & "' , '" & TxtAdd1.Text & "' , '" & TxtAdd2.Text & "' , '" & CmbCity.Text & "' , '" & TxtDist.Text & "' , '" & TxtPIN.Text & "' , '" & DBState.Text & "' , '" & TxtEmail.Text & "' , '" & TxtPhone.Text & "' , '" & TxtMob.Text & "' , '" & TxtVAT.Text & "' , '" & TxtCST.Text & "' , '" & TxtGST.Text & "' , '" & TxtPAN.Text & "')"
        Sqlcommand = New MySqlCommand(SqlQuery, Conn)
        Reader = Sqlcommand.ExecuteReader
        Reader.Close()
    End If
Catch ex As Exception
    MessageBox.Show(ex.Message)
End Try
DisableTxt(Me)
EnableBtn(Me)
BtnSave.Enabled = False
BtnAdd.Enabled = True
BtnAdd.Focus()
BtnExit.Enabled = True
Reader.Close()
Ledgers()
EditClick = False

Я вижу обе записи(отредактированные и старые) в форме.
Если в моей таблице есть 10 записей , я вижу 20 записей(дополнительная запись всех записей)
Предположим, что если я отредактирую свою запись с "JAMEER" на "JAMEER MULLA", то увижу обе записи
когда я выхожу и снова запускаю свое приложение, все в порядке.

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

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

Member 13550326

Попробуй
Если EditClick = True, То
Свойство sqlcommand.Свойства commandtext = "обновление регистров set имя = @название, ВРП = @стеклопластик, добавьте 1= @добавьте 1, Add2= @add2, город = @город, Дист = @дист пинкод = @шпилька, состояние = @государстве, электронная почта = электронная почта, стационарный = @телефоне, смартфоне или планшете = @моб, ватно - = @НДС, CSTNO = @КНТ, GSTNO = @ГСТ Пан = @сковороду, где cust_id = '" &амп; TxtCustID.Текст & "'"
AddParam()
Дим Регионального Экспресс-Метро, Как Целое Число = Свойство Sqlcommand.Метод executenonquery
Еще
Свойство sqlcommand.Свойства commandtext = "вставить в регистры бухгалтерского учета (наименование,стеклопластик,добавьте 1,Add2,город,р-н,пинкод,государство,электронной почты,стационарные,мобильные,ватно,CSTNO,GSTNO,Пан) значения (@имя, @ГРП @добавьте 1, @add2, @город @Р, @шпилька, @государстве, электронная почта, @телефон, @моб @НДС, @КНТ @ГСТ @Пан)"
AddParam()
Дим Регионального Экспресс-Метро, Как Целое Число = Свойство Sqlcommand.Метод executenonquery
Конец, Если
Поймать ex как исключение
Ящик для сообщений.Показать(напр.сообщение)
Конец Попытки
DisableTxt(Me)
EnableBtn(Me)
Кому btnsave.Включен = Ложь
BtnAdd.Включен = Истина
BtnAdd.Сосредоточить()
BtnExit.Включен = Истина
EditClick = False

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

1 Ответов

Рейтинг:
1

OriginalGriff

Две вещи:

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

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

2) Не используйте ExecuteReader с INSERT или UPDATE команды - использование ExecuteNonQuery вместо.

Исправь и то, и другое, и это сработает.


Member 13550326

Прежде всего, спасибо за ваш совет использовать параметризованный запрос.
Я разбил все свои запросы на параметризованные запросы, но вышеупомянутая проблема все еще не решена.

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

После того, как я перезапущу свое приложение, все будет в порядке.