2015-06-29 5 views
0

У меня некорректная синтаксическая ошибка n моего кода ниже.Неправильный синтаксис ','

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     If ComboBox1.Text = "" Then 
      MessageBox.Show("ເລືອກໂຕະທີ່ຕ້ອງການຊຳລະ") 
     ElseIf TextBox1.Text = "" Then 
      MessageBox.Show("ເລືອກສິນຄ້າ") 
     ElseIf TextBox2.Text = "" Then 
      MessageBox.Show("ເລືອກຈຳນວນສິນຄ້າ") 
     Else 
      Dim OrderData As Date 
      OrderData = FormatDateTime(Now, DateFormat.ShortDate) 
      Dim cnsql = "insert into TbOrderDetail values(" & Label1.Text & "," 
      cnsql &= "" & ProductID & "," & TextBox2.Text & "," 
      cnsql &= "" & Label2.Text & ")" 
      SQL.ManageData(cnsql) 
     End If 
     showData() 
     showData22() 
     TextBox2.Focus() 
    End Sub 
+1

Вы открыты для SQL-инъекции, но помимо формирования, что я не вижу, т он неверный синтаксис. Можете ли вы рассказать нам номер строки? Я предполагаю, что он находится в 'SQL.ManageData'. –

+0

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

+0

Я нажимаю на продукт заказа btn, тогда он показывает неправильный синтаксис ','. и SQLCon.open() соединение не было закрыто. текущее состояние соединения открыто @TimSchmelter – taythm

ответ

0

Я уверен, что вам нужно определить .TEXT свойства в виде текстовых строк в коде SQL. Попробуйте вместо этого:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     If ComboBox1.Text = "" Then 
      MessageBox.Show("ເລືອກໂຕະທີ່ຕ້ອງການຊຳລະ") 
     ElseIf TextBox1.Text = "" Then 
      MessageBox.Show("ເລືອກສິນຄ້າ") 
     ElseIf TextBox2.Text = "" Then 
      MessageBox.Show("ເລືອກຈຳນວນສິນຄ້າ") 
     Else 
      Dim OrderData As Date 
      OrderData = FormatDateTime(Now, DateFormat.ShortDate) 
      Dim cnsql = "insert into TbOrderDetail values('" & Label1.Text & "'," 
      cnsql &= "" & ProductID & ",'" & TextBox2.Text & "'," 
      cnsql &= "'" & Label2.Text & "')" 
      SQL.ManageData(cnsql) 
     End If 
     showData() 
     showData22() 
     TextBox2.Focus() 
    End Sub 

Я оставляю ProductID аут, как это должно быть целое число точно.

0

Вместо того чтобы объединять строки для создания вашего запроса sql, вы всегда должны использовать параметризованные запросы. Таким образом вы предотвращаете проблемы с sql-инъекцией и локализацией. База данных должна вывести тип ваших параметров из их значений, что может привести к неправильным результатам или проблемам производительности.

Может быть, вы должны обернуть текстовые значения в апострофы, но вместо того, что использование SQL-параметров, как уже упоминалось:

Using con As New SqlConnection(My.Settings.Default.ConnectionString) 
    Using cmd As New SqlCommand("insert into TbOrderDetail values(@ProductID, @Column2, @Column3)", con) 
     Dim p As New SqlParameter("@ProductID", SqlDbType.Int) 
     p.Value = ProductID 
     cmd.Parameters.Add(p) 
     p = SqlParameter("@Column2", SqlDbType.VarChar) 
     p.Value = TextBox2.Text 
     cmd.Parameters.Add(p) 
     p = SqlParameter("@Column3", SqlDbType.VarChar) 
     p.Value = Label2.Text 
     cmd.Parameters.Add(p) 
     con.Open() 
     Dim insertedCount = cmd.ExecuteNonQuery() 
    End Using 
End Using 
0

вы должны написать имена столбцов рядом с

вставки в TbOrderDetail

вставки в TbOrderDetail (имя_столбца1, имя_столбца2) VALUES (значение1, значение2)

Смежные вопросы