在c#中直接插入值到db语法中
本文关键字:db 语法 直接插入 | 更新日期: 2023-09-27 17:51:20
不带参数的INSERT
值是完全可以理解的,为什么它不应该被允许,例如你想要防止sql注入。然而,我不明白为什么做以下事情仍然是一个很大的不:
cmd.CommandText = "SELECT * FROM [Students]
WHERE StudentID = " + studentID + ";";
int getID = (int)cmd.ExecuteScalar();
当它只是SELECT
时,有什么害处呢?我真的不明白下面的参数有什么意义。我不是在质疑它,我只是想知道为什么参数是必要的,以及我可以从上面的代码中得到什么结果,而不是使用下面的选项。
var pStudentID = new SqlParameter("@studentID", SqlDbType.Int);
pStudentID.Value = studentID;
cmd.Parameters.Add(pStudentID);
最好使用参数有两个原因:
-
Sql注入-您的第一个示例将容易受到Sql注入攻击。这意味着如果学生id是从web表单输入的,有人可以使用'——注释掉选择字符串,并对数据库发出其他命令。
-
Prepare—如果您使用参数,您可以准备sql语句,这是语法的预编译。
编辑:前几天我在reddit上看到了这个视频,这是sql注入如何工作的一个很好的例子。sql注入
假设输入:
var studentID = "''; drop table users;--"
cmd.CommandText = "SELECT * FROM [Students]
WHERE StudentID = " + studentID + ";";
如果调用这个select语句,将完全删除表users。
参数通过只批准要添加到查询中的合法输入来帮助。