定义Where和Order生成对象
public abstract class SqlClauseBuilder
{
//便于之后的扩展:ToSqlString(ISqlBuilder sqlBuilder)
public abstract string ToSqlString();
}
/// /// 拼接Where后的条件语句 ///
public class WhereSqlClauseBuilder : SqlClauseBuilder
{
private Dictionary
dicSqlConditions = new Dictionary
(); ///
/// 添加条件 /// ///
字段名 ///
字段值 ///
比较运算符 ///
连接符(and or none) public void Append(string strFieldName, string strFieldValue, string strCompareOperation = CompareOperationConst.EqualTo, string strLogicOperation = LogicOperatorConst.None) { SqlConditionItem item = new SqlConditionItem(); item.SetOperationItem(strFieldName, strFieldValue, strCompareOperation); dicSqlConditions.Add(item, strLogicOperation); } ///
/// 生成Sql语句 /// ///
public override string ToSqlString() { StringBuilder sb = new StringBuilder(); foreach (var item in dicSqlConditions) { sb.Append(item.Key.GetOperationItem() + " " + item.Value); } return sb.ToString(); } } ///
/// 单个where项 /// public class SqlConditionItem { private string strFieldName; private string strFieldValue; private string strCompareOperation; ///
/// 以字符串的形式获得条件 /// ///
单个条件的字符串
public string GetOperationItem() { StringBuilder sb = new StringBuilder(); sb.Append(" " + strFieldName + " " + strCompareOperation + " " + strFieldValue); return sb.ToString(); } ///
/// 赋值 /// ///
字段名 ///
字段值 ///
比较运算符 public void SetOperationItem(string strFieldName, string strFieldValue, string strCompareOperation) { this.strFieldName = strFieldName; this.strCompareOperation = strCompareOperation; this.strFieldValue = strFieldValue; } } ///
/// 拼接OrderBy后的条件语句 /// public class OrderBySqlClauseBuilder : SqlClauseBuilder { private Dictionary
dicOrderConditions = new Dictionary
(); public void AppendItem(string strDataField, string strFieldSort = FieldSortConst.Asc) { if (dicOrderConditions.Count > 0) { dicOrderConditions.Add(", " + strDataField, strFieldSort); } else { dicOrderConditions.Add(strDataField, strFieldSort); } } public override string ToSqlString() { StringBuilder sb = new StringBuilder(); foreach (var item in dicOrderConditions) { sb.Append(item.Key + " " + item.Value); } return sb.ToString(); } }
使用这些对象帮助我们生成相应的SQL语句中的where和order部分,当然,也可以定义其他的
定义整合类
整合类是将上述运用起来形成的一个整体,从而实现增删该查这些功能,具体如下
public class DataManager
where T : class,new() { #region 增加 ///
/// 添加 /// ///
实体对象 ///
SQL语句
public static int Add(T obj) { StringBuilder sb = new StringBuilder(); string strTableName = GetTableName(); string strFieldNames; string strFieldValues; GetInsertFieldAndValue(obj, out strFieldNames, out strFieldValues); sb.AppendFormat("insert into {0}({1}) values({2})", strTableName, strFieldNames, strFieldValues); return SQLHelper.GetInstance().ExecuteNonQuery(sb.ToString(), CommandType.Text); } #endregion #region 删除 ///
/// 全部删除 /// ///
这个类型的对象 ///
操作影响行数
public static int Delete(T obj) { return Delete(obj, null); } ///
/// 带有条件的删除 /// ///
被删除对象 ///
条件 ///
操作影响行数
public static int Delete(T obj, Action
whereSqlClauseBuilder) { StringBuilder sb = new StringBuilder(); string strTableName = GetTableName(); WhereSqlClauseBuilder w = new WhereSqlClauseBuilder(); if (whereSqlClauseBuilder != null) { whereSqlClauseBuilder(w); sb.AppendFormat("delet