【发布时间】:2016-07-19 09:48:52
【问题描述】:
我有一个包含 SQL 查询的程序,昨天有人向我指出它很容易受到 SQL 注入攻击。在做了一些研究之后,我可以看到要解决这个问题,我需要使用参数。 我有以下代码...如何参数化?
Public Shared Function SaveNewPerson(ByVal firstName As String, lastName As String, ByVal age As Integer, ByVal postcode As String, m_cn As OleDbConnection)
Dim tr As OleDbTransaction = Nothing
Try
tr = m_cn.BeginTransaction()
Dim Dc As New OleDbCommand
Dc.Connection = m_cn
Dc.CommandText = "INSERT INTO tblPerson([firstName], [lastName], [age], [postcode]) VALUES('" & firstName & "', '" & lastName & "', '" & age & "', '" & postcode & "')"
Dc.Transaction = tr
Dc.ExecuteNonQuery()
Dim personID As Integer
Dc.CommandText = "SELECT SCOPE_IDENTITY() AS personID"
Dc.CommandType = CommandType.Text
personID = CType(Dc.ExecuteScalar(), Integer)
tr.Commit()
Catch ex As Exception
tr.Rollback()
Throw
End Try
End Function
【问题讨论】:
-
@MattWilko 嗨,马特,我使用的是 SQLServer,而不是 Access 数据库,我可能应该在问题中说明这一点,但这就是为什么我认为 OleDb 是一个奇怪的选择
-
请发布您的表格架构/定义。另外,您使用的是什么数据库服务器?
-
@fcm 没有定义,我是在开始vb项目之前在SQLServer中创建的
-
用你的变量替换字符串常量
标签: vb.net tsql oledb executescalar