在查询 1 和 2 中,文本框中的文本都插入到数据库中。这里参数化查询有什么意义?
- 传递
txtTagNumber
作为查询参数
SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Cars " +"VALUES(@TagNbr);" , conn);
cmd.Parameters.Add("@TagNbr", SqlDbType.Int);
cmd.Parameters["@TagNbr"].Value = txtTagNumber.Text;
- 在构造查询之前将
txtTagNumber
转换为整数
int tagnumber = txtTagNumber.Text.ToInt16(); /* EDITED */
INSERT into Cars values(tagnumber.Text); /* then is it the same? */
另外,在这里我将使用正则表达式验证来停止插入非法字符。
原文由 sqlchild 发布,翻译遵循 CC BY-SA 4.0 许可协议
参数化查询在运行 SQL 查询之前会正确替换参数。它完全消除了“脏”输入改变查询含义的可能性。也就是说,如果输入包含 SQL,它就不能成为执行内容的一部分,因为 SQL 从未注入到结果语句中。