在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);

在c#中直接插入值到db语法中

最好使用参数有两个原因:

  1. Sql注入-您的第一个示例将容易受到Sql注入攻击。这意味着如果学生id是从web表单输入的,有人可以使用'——注释掉选择字符串,并对数据库发出其他命令。

  2. Prepare—如果您使用参数,您可以准备sql语句,这是语法的预编译。

编辑:前几天我在reddit上看到了这个视频,这是sql注入如何工作的一个很好的例子。sql注入

假设输入:

var studentID = "''; drop table users;--"
 cmd.CommandText = "SELECT * FROM [Students] 
                    WHERE StudentID = " + studentID + ";";

如果调用这个select语句,将完全删除表users。

参数通过只批准要添加到查询中的合法输入来帮助。