Sql通用增删改查带参数方法

来源:互联网 发布:专业淘宝货源批发市场 编辑:程序博客网 时间:2024/06/06 11:38

引子:由于现在数据库安全的关注越来越多,sql注入几乎是绝对忽略的一环,sql语句带参数就相对安全一些,但是平常的一些查询语句带参数,写的较为繁琐,于是就想如何能够节省工作量,便做了一个通用中间库,希望能有所帮助(盗版了我同事的代码偷笑)。

原理:利用T entity的反射拼接

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace DB{    public interface IDataBaseHelper<T> where T: class,new()    {        /// <summary>        /// 添加        /// </summary>        /// <param name="table"></param>        /// <param name="entity"></param>        /// <returns></returns>        bool Add(T entity);         DataSet Select(string col, T entity);     }}

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;namespace DB{    public class DataBaseHelper<T>:IDataBaseHelper<T> where T:class,new()    {        public bool Add(T entity)        {            string cols="";            string vals="";            List<SqlParameter> parameterList = new List<SqlParameter>();            parameterList.Add(new SqlParameter("@table", entity.GetType().Name));            foreach(var item in entity.GetType().GetProperties()){                cols +=item.Name+",";                vals +="@"+item.Name+",";                SqlParameter parameter=new SqlParameter();                parameter.ParameterName="@"+item.Name;                parameter.Value=item.GetValue(entity,null);                parameterList.Add(parameter);            }            StringBuilder strSql=new StringBuilder();            strSql.Append("insert into @table(");            strSql.Append(cols.Substring(0,cols.Length-1));            strSql.Append(") values (");            strSql.Append(vals.Substring(0,cols.Length-1));            strSql.Append(")");                        DbHelperOra.ExecuteSql(strSql.ToString(),parameterList.ToArray());        }         public DataSet Select(string col, T entity)        {            string cols = "";            List<SqlParameter> parameterList = new List<SqlParameter>();            parameterList.Add(new SqlParameter("@table", entity.GetType().Name));            foreach (var item in entity.GetType().GetProperties())            {                cols += " "+item.Name + "=@"+item.Name+" and";                 SqlParameter parameter = new SqlParameter();                parameter.ParameterName = "@" + item.Name;                parameter.Value = item.GetValue(entity, null);                parameterList.Add(parameter);            }            StringBuilder strSql = new StringBuilder();            strSql.Append("select "+col +" from @table");            if (entity != null) {                strSql.Append("where " + cols.Substring(0,cols.Length-3));            }            DataSet ds= DbHelperOra.Query(strSql.ToString(), parameterList.ToArray());            return ds;        }    }}

结束语:代码没有完全完善,也不知道这样子会不会带来什么不好的后果,比如执行效率低下等等。希望同学拍砖。

0 0
原创粉丝点击