Sql通用增刪改查帶引數方法
阿新 • • 發佈:2019-02-19
引子:由於現在資料庫安全的關注越來越多,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; } } }
結束語:程式碼沒有完全完善,也不知道這樣子會不會帶來什麼不好的後果,比如執行效率低下等等。希望同學拍磚。