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

引子:由于现在数据库安全的关注越来越多,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值