选项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();
我见过第一个选项的大部分项目......使用参数传递值的用途是什么?使用参数传递值的任何优点??你的建议PLZ ..
答案 0 :(得分:8)
您不必关心引用特殊字符。如果您忘记引用SQL注入攻击是可能的。
如果您使用选项2,则会在Textbox3
'); DELETE * FROM table_name; --
以下SQL语句已被删除:
INSERT INTO table_name(eid,eName,Dept) values ('value1','value2','');
DELETE * FROM table_name; -- ')
第二个语句删除table_name
中的每一行。可以在那里插入任何可能的语句而不是删除语句。
答案 1 :(得分:1)
有几个原因:
'
)以避免SQL错误或SQL注入(如 H-Man2 所述)。NumberDecimalSeparator
等于逗号,
并且您想在数据库中插入Double
值,则通常需要用点替换逗号。无需担心参数。DateTime
格式。答案 2 :(得分:0)
你应该从不使用选项2。
这是非常糟糕的做法,对SQL注入非常开放。
始终坚持选项1.这是迄今为止最好的选择。
在此处阅读有关SQL注入的更多信息: http://en.wikipedia.org/wiki/SQL_injection