c# - 为什么我们使用参数传递值?

标签 c# sql-server

选项1:在此值中使用参数插入

string insertstr = "INSERT INTO table_name(eid, eName, Dept) " + 
                    "VALUES(@eid, @eName, @dept)";

SqlCommand cmd = new SqlCommand(insertstr, con);

cmd.Parameters.Add("@eid", SqlDbType.Int).Value = Convert.ToInt32(textBox1.Text);
cmd.Parameters.Add("@ename", SqlDbType.VarChar, 50).Value = textBox2.Text.ToString();
cmd.Parameters.Add("@dept", SqlDbType.VarChar, 100).Value = textBox3.Text.ToString();


选项2:

SqlCommand cmd = new SqlCommand("INSERT INTO table_name(eid,eName,Dept) values('"+ textBox1.Text +"','"+ textBox2.Text +"','"+ Textbox3.Text +"'", con);
cmd.ExecuteNonQuery();


我见过的大多数项目都有第一种选择...使用参数传递值的用途是什么?通过使用参数传递值有什么好处?你的建议

最佳答案

您不必担心引用特殊字符。如果您忘记引用,则可能会发生SQL-Injection攻击。

如果您使用选项2,并且在Textbox3中输入以下内容

'); DELETE * FROM table_name; --


执行以下SQL语句:

INSERT INTO table_name(eid,eName,Dept) values ('value1','value2','');
DELETE * FROM table_name; -- ')


第二条语句从table_name删除每一行。除了删除语句外,可以在其中插入任何可能的语句。

关于c# - 为什么我们使用参数传递值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818851/

相关文章:

sql - 从连接表列表中选择唯一的列名称

sql-server - 如何记录并查找最昂贵的查询?

引用主键时 SQL 查询非常慢

sql - 如何将多个值代替单个值传递给存储过程

c# - 在 Active Directory Controller 上捕获密码更改

c# - 在文本文件的每一行内的 ListView 中写入第一列和第二列行

c# - 如何增加 ASP.NET Core SignalR v2.1 中的超时设置?

sql-server - 消失的存储过程

c# - 仅在 Gridview 的最后一行显示复选框?

c# - 数码相机算法