1. 程式人生 > >Sql通用增刪改查帶引數方法

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;
        }
    }
}

結束語:程式碼沒有完全完善,也不知道這樣子會不會帶來什麼不好的後果,比如執行效率低下等等。希望同學拍磚。