halo22 Ответов: 1

Как поместить элементы, выбранные в listview, и значение внутри текстового поля в мою базу данных?


Я пытаюсь поместить имя, которое находится в текстовом поле, продукт и цену из listview1 в базу данных, и оно будет отображаться в listview2. Это работает, но есть сообщение: "Неправильный синтаксис около "100". типы данных моего productorder является: наименование (тип varchar), продукта (тип varchar), и цена(инт).

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

Система Импорта.Данных.Поставщики sqlclient
Система Импорта.ИО

Форма Публичного Класса 1
Дим кон как объект sqlconnection = новое sqlconnection("сервер=.\В SQL;базы данных=попробовать;параметр trusted_connection=истина")
Dim cmd как SqlCommand
Dim cmd2 как SqlCommand
Dim rdr как SqlDataReader

Частная суб методе form1_load(отправителя как объект, а равно EventArgs) обрабатывает ключевое слово mybase.Загрузить
против.Открыть()
против.Закрывать()
список()

список2()
Конец Подводной Лодки
Югу список ()
против.Открыть()


cmd = New SqlCommand ("SELECT * FROM ProductTable", con)
rdr = cmd.Метода executereader
Мыши listview1.Предметы.Четкий()
Если rdr. имеет значение, то
Сделать в то время как РДР.Читать()
Dim arr As String () = новая строка(2) {}
Dim itm как ListViewItem

arr(0) = rdr ("productID")
arr(1) = rdr ("продукт")
arr(2) = rdr ("цена")

itm = новый ListViewItem(arr)
Мыши listview1.Предметы.Добавить (itm)


Петля

Конец, Если

против.Закрывать()
Конец Подводной Лодки


Private Sub btnsave_Click (sender As Object, e As EventArgs) обрабатывает btnsave.Щелчок

modifyrecord ("Insert into ProductOrder ([name],[product],[price]) values ('"& txtname.Текст &ампер; "','" &амп; мыши listview1.Свойство selecteditems(0).Подпункты(1).Text &"', " & ListView1.SelectedItems(0).Подпункты (2).Текст & "")



Конец Подводной Лодки
Частная суб listView1_MouseClick_1(как byval отправителя как объект, как byval E Как MouseEventArgs)

Конец Подводной Лодки

Суб список2()
против.Открыть()


cmd2 = New SqlCommand ("SELECT * FROM ProductOrder", con)
РДР = cmd2.Метода executereader
ListView2.Items.Четкий()
Если rdr. имеет значение, то
Сделать в то время как РДР.Читать()
Dim arr As String () = новая строка(3) {}
Dim itm как ListViewItem

arr(0) = rdr ("id")
arr(1) = rdr ("имя")
arr(2) = rdr ("продукт")
arr(3) = rdr ("цена")

itm = новый ListViewItem(arr)
ListView2.Items.Добавить (itm)


Петля

Конец, Если

против.Закрывать()
Конец Подводной Лодки
Sub modifyrecord(ByVal sql)

Если txtname.Text = "" Или ListView1. SelectedItems(0).Подпункты(1).Text = "" Или IsNumeric(ListView1. SelectedItems(0).Подпункты(2). Текст) = False, То


Еще
против.Открыть()
cmd = New SqlCommand(sql, con)
УМК.Метод executenonquery()
против.Закрывать()
список()

Конец, Если

Конец Подводной Лодки
Конец Класса

GKP1992

Пожалуйста, отладьте свой код и выясните, какая строка выдает ошибку.

1 Ответов

Рейтинг:
2

OriginalGriff

Не делай этого так. Никогда не объединяйте строки для построения 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;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

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

И когда вы это исправите, проблема, которую вы заметили, тоже исчезнет...