[散分]送新人,为什么不推荐这样写,这样写有啥问题?
如下代码
C# code
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string sqlstr = "update Patients set P_Name='"
// + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',ID_Card='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "',Guardian_Name='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text.ToString().Trim() + "' where PatientID='"
+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlHp.SQLExecute(sqlstr);
GridView1.EditIndex = -1;
bind();
}
为什么不推荐这样写,这样写有啥问题?
------解决方案--------------------不安全也不高效啊,而且要是改动的话也不方便改啊,不清楚
------解决方案--------------------1.ToString()没有考虑空值处理
2.注入式攻击
------解决方案--------------------我会用存储过程
------解决方案--------------------很容易被注入,比如第一个 TextBox 的值为 5'--
你的 P_Name 就全为 5 了。
------解决方案--------------------UP
------解决方案--------------------sdm
------解决方案--------------------应该主要就是安全的问题
------解决方案--------------------ding
------解决方案--------------------可读性比较差吧
------解决方案--------------------安全的问题
------解决方案--------------------建议用存储过程
安全!
------解决方案--------------------回帖是一种美德
------解决方案--------------------这样写的话,有一处改动就会需要改很多地方。
------解决方案--------------------不方便读写..你这样简单的还好说..复杂的判断的 就很难知道程序运行的本身SQL是什么了..
不如写好参数使用SqlParameter 这样SQL语句很清晰.很容易知道程序最终要去执行什么.不必去断点到最后才知道SQL是什么。
------解决方案--------------------jf
------解决方案--------------------这样写有被注入式攻击的危险,需要手动过滤参数,不如写成存储过程来的方便。
------解决方案--------------------建议LZ从头到尾些个最规范的出来学习下哈
------解决方案--------------------应该用SqlParameter。
------解决方案--------------------
------解决方案--------------------建议用存储过程。
可读性一般。
------解决方案--------------------主要还是安全性,不是可读性问题吧
------解决方案--------------------按照LZ的意思应该强调的不是安全方面的问题吧!
string是比较特殊的类型,按照string不可变性
C# code
string str="a"+"b"+"c";