Member 12414126 Ответов: 2

У меня неправильный синтаксис рядом с",".


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

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

<pre>con = New SqlConnection(cs)
            con.Open()
            Dim cb1 As String = "insert into CheckOut_Room(ID,BillNo,CheckInID,BillDate,Notes ) VALUES (" & txtBillID.Text & ",'" & txtBillNo.Text & "'," & txtCheckInID.Text & ",@d2,@d1)"
            cmd = New SqlCommand(cb1)
            cmd.Connection = con
            cmd.Parameters.AddWithValue("@d1", txtNotes.Text)
            cmd.Parameters.AddWithValue("@d2", dtpBillDate.Value)
            cmd.ExecuteReader()
            con.Close()

2 Ответов

Рейтинг:
8

Bryian Tan

Почему бы не держать его в чистоте вместо того, чтобы смешивать Parameterized а обычный запрос с конкатенацией строк? ручки с Parameterized Это избавит вас от некоторых головных болей в будущем, таких как уязвимость SQL-инъекции, и позволит избежать проблемы синтаксиса .

Еще одно наблюдение, похоже,что txtBillID,txtBillNo, txtCheckInID должны быть целыми числами, вам может потребоваться обновить код, чтобы преобразовать строку в целое число, прежде чем вставлять ее в таблицу.

Dim cb1 As String = "insert into CheckOut_Room(ID,BillNo,CheckInID,BillDate,Notes ) VALUES (@d1, @d2, @d3, @d4,@d5)"
        cmd = New SqlCommand(cb1)
        cmd.Connection = con
        cmd.Parameters.AddWithValue("@d1", txtBillID.Text)
        cmd.Parameters.AddWithValue("@d2", txtBillNo.Text)
        cmd.Parameters.AddWithValue("@d3", txtCheckInID.Text)
        cmd.Parameters.AddWithValue("@d4", dtpBillDate.Value)
        cmd.Parameters.AddWithValue("@d5", txtNotes.Text)


Рейтинг:
0

Patrice T

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

Dim cb1 As String = "insert into CheckOut_Room(ID,BillNo,CheckInID,BillDate,Notes ) VALUES (" & txtBillID.Text & ",'" & txtBillNo.Text & "'," & txtCheckInID.Text & ",@d2,@d1)"

Вы счастливо смешиваете конкатенацию и параметры в одном запросе, это плохо.

Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]

Вторичная проблема, невозможно узнать, что именно является вашим запросом, потому что это зависит от значений параметров.
Только отладчик может показать, что такое реальный запрос.