参数化查询以防止SQL注入

Mon*_*key -1 sql vb.net sql-server parameters

我知道我需要参数化我的查询,主要是出于安全原因,我需要帮助这样做.我在Visual Studio 2012和SQL Server 2012中使用VB.我以前从未这样做过,我在网上找到的所有内容似乎都不适合我的特定代码.我认为需要工作的一点如下:

objconnection.Open()

    strSQL = "insert into dbo.Event(ID, Name, Summary, Date) values (NEWID(), '" & strName & "','" & strSummary & "','" & strLocation & "','" & strDate & "')"
    objcmd = New OleDbCommand(strSQL, objconnection)
    objcmd.ExecuteNonQuery()
    objconnection.Close()
    MsgBox("Event Created", vbMsgBoxSetForeground)
Run Code Online (Sandbox Code Playgroud)

任何指针都非常感激.如果您需要更多代码,请告诉我们!

来自评论:

我确实看了那个并尝试过但我遇到了问题.在这一部分:

.add(new SqlParameter("@strname", '"& strName &"'))
Run Code Online (Sandbox Code Playgroud)

它表示"@streventname"和"strName"之间的下划线 Expression expected.

Dim cmd As SqlCommand = New SqlCommand(cmdText, objconnection)
Run Code Online (Sandbox Code Playgroud)

objconnection获取错误"类型'System.Data.OleDb.OleDbConnection'的值无法转换为'System.Data.SqlClient.SqlConnection'.

可能是我错过了一些愚蠢的东西.

Lar*_*ech 5

您正在将SQL对象与OLEDB对象混合.看起来您正在使用OLEDB连接,因此这意味着您必须使用OLEDB对象,因此请使用OleDbCommand而不是SqlCommand等.

您的参数行应如下所示:

.add(new OleDbParameter("@strname", strName))
Run Code Online (Sandbox Code Playgroud)

对于OleDB查询,重要的是要意识到参数实际上忽略了名称@strname,只是按索引顺序更新参数信息.因此,参数在sql语句中出现的顺序必须与您提供参数的顺序相同.