日期:2014-05-20  浏览次数:20909 次

[散分]送新人,为什么不推荐这样写,这样写有啥问题?
如下代码
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。
------解决方案--------------------
探讨
不方便读写..你这样简单的还好说..复杂的判断的 就很难知道程序运行的本身SQL是什么了..
不如写好参数使用SqlParameter 这样SQL语句很清晰.很容易知道程序最终要去执行什么.不必去断点到最后才知道SQL是什么。

------解决方案--------------------
建议用存储过程。

可读性一般。
------解决方案--------------------
主要还是安全性,不是可读性问题吧
------解决方案--------------------
按照LZ的意思应该强调的不是安全方面的问题吧!

string是比较特殊的类型,按照string不可变性
C# code
string  str="a"+"b"+"c";