没有插入insert语句的字符串

C S*_*per 0 .net sql vb.net asp.net

我试图在数据库中插入一个问题,表中的字段为nvarchar(max)(sql server 2008 r2)

代码如下:

Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
    gc.ExecuteCommand("insert into QuestionMaster values('" & txtQuestion.Text & "','" & ViewState("ClientID") & "','" & ViewState("KioskID") & "')")
    Response.Write("<script type='text/javascript' language='javascript'>alert('Question Added Sucessfully!!!')</script>")
    BindGrid()
End Sub
Run Code Online (Sandbox Code Playgroud)

当我插入任何字符串时:

what's your name? 
Run Code Online (Sandbox Code Playgroud)

然后它给了我错误:

's'附近的语法不正确.字符串')'后面的未闭合引号.

如果我只是提供字符串:

What is your name?
Run Code Online (Sandbox Code Playgroud)

然后它不会给我错误.

请帮我.

pax*_*blo 9

如果可能,您应该使用参数化查询,因为直接将简单的字符串插入到查询中,如您所见,可能会破坏查询.

换句话说,如果文本框包含Paddy O'Rourke,您的查询将变为:

                                 open   close   what the ?
                                  |       |      |
insert into QuestionMaster values('Paddy O'Rourke') ...
Run Code Online (Sandbox Code Playgroud)

你可以看到嵌入式'破坏查询的事实.

正如您尚未意识到的那样,它还允许人们对您的数据库执行SQL注入攻击,因为您没有清理输入.

如果由于某种原因,您的商店不允许参数化查询(从您的一条评论中看到),请找另一个工作地点.不,只是开个玩笑,但在这种骨头政策出现的情况下,你需要自己清理输入.

但这充满了危险,我首先会尝试改变这样的政策,毫不含糊地列出所涉及的风险.