[转]强壮的DBHelper(1)

DBHelper是数据库系统中常用的类,通常用它来处理针对数据库的操作,比如基本的CRUD。一个人在写了一段程序后,不管用的是什么语言,这个类肯定能自己写了,当然,写出来的玩意千差万别,各有千秋,五花八门,啥样的都有,是啊,林子大了。

Version1.0:

public class DBHelper
    {
        SqlConnection cnn = new SqlConnection(@"server=.;uid=sa;pwd=;database=testDB;");
        public int ExecuteNonQuery(string sql)
        {
            SqlCommand cmd = cnn.CreateCommand();
            cmd.CommandText = sql;
            cnn.Open();
            int x = cmd.ExecuteNonQuery();
            cnn.Close();
            return x;
        }

    public DataTable GetTable(string sql)
        {
            SqlCommand cmd = cnn.CreateCommand();
            cmd.CommandText = sql;

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }
    }

这个版本的问题在于:实在没法避免客户直接在sql字符串中胡乱输入,比如“' or 1=1 --”,这种问题实在没法避免,因为你用的是sql语句,拼进来的玩意作为sql语句的一部分去执行,而不是作为参数方式,不管你用“+”拼接字符串,还是用string.Format来整合,都不是好办法。

还有个问题,在于如果某个查询只返回一行一列的数据,使用GetTable,显然有点浪费。

因此下一个版本的更改在于参数的处理,和方法的增加上。

土鳖扛铁牛。

转摘自:http://blog.sina.com.cn/s/blog_49458c270100hgno.html

posted @ 2011-03-02 00:08  愤怒的熊猫  阅读(205)  评论(0编辑  收藏  举报