在查询1和2中,文本框中的文本都插入到数据库中.这里参数化查询的意义是什么?
1.> -------------
SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Cars " +"VALUES(@TagNbr);" , conn);
cmd.Parameters.Add("@TagNbr", SqlDbType.Int);
cmd.Parameters["@TagNbr"].Value = txtTagNumber.Text;
Run Code Online (Sandbox Code Playgroud)
2.> --------------
int tagnumber = txtTagNumber.Text.ToInt16(); /* EDITED */
INSERT into Cars values(tagnumber.Text); /* then is it the same? */
Run Code Online (Sandbox Code Playgroud)
此外,在这里我将使用正则表达式验证来停止插入非法字符.
我正在对一个系统进行审计,开发人员坚持认为这是一个SQL注入证明.这是通过在登录表单中删除单引号来实现的 - 但后面的代码没有参数化; 它仍然使用文字SQL,如下所示:
username = username.Replace("'", "");
var sql = "select * from user where username = '" + username + "'";
Run Code Online (Sandbox Code Playgroud)
这真的很安全吗?是否有另一种插入单引号的方法,可能是使用转义字符?正在使用的DB是Oracle 10g.