我试图插入我的ORDERS表中的特定列,使用文本框输入并使用另一个文本框输入查找特定列。
Private Sub addCardBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addCardBtn.Click
custConn.Open()
'New sql Insert statement'
Dim sqlStatement As String = "insert into ORDERS (CARD_NUMBER) ('" + cardNoTxt.Text + "') WHERE ORDER_ID" & orderIDTxt.Text
commd = New OleDbCommand(sqlStatement, custConn)
commd.ExecuteNonQuery()
'If record is added successfully show message box'
MessageBox.Show("Card Number Saved", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
custConn.Close()
End Sub
答案 0 :(得分:3)
也许,您想要UPDATE
查询?
Dim sqlStatement As String = "UPDATE ORDERS SET CARD_NUMBER = :CARDNO
WHERE ORDER_ID = :ORDERID";
始终使用绑定变量。避免SQL * iInjection。
简要解释什么是SQL*Injection
,
将OR 1=1
添加到任何逻辑表达式将始终给出TRUE结果(WHERE name = 'Mahesh' or 1=1
将获取表中的所有行...)。因此,当您构建SQL语句时,就像这样,您暴露了一个被篡改的漏洞,以便进行此类操作。
commd = New OleDbCommand(sqlStatement, custConn)
commd.Parameters.Add("CARDNO", OracleType.VarChar).Value = cardNoTxt.Text
commd.Parameters.Add("ORDERID", OracleType.VarChar).Value = orderIDTxt.Text
commd.ExecuteNonQuery()
通过这种方式绑定vales,您的查询是安全的,而不是在运行时可修改。只是绑定变量的值会发生变化。它还改进了DBMS中的查询缓存。并且还提高了性能。