引子:由于现在数据库安全的关注越来越多,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;
}
}
}
结束语:代码没有完全完善,也不知道这样子会不会带来什么不好的后果,比如执行效率低下等等。希望同学拍砖。