using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
using System.Text;
using CallCenterApi.DB;
namespace CallCenterApi.DAL
{
///
/// 数据访问类:文章类别表
///
public partial class article_category
{
private string databaseprefix;//数据库表名前缀
public article_category(string _databaseprefix = "dt_")
{
databaseprefix = _databaseprefix;
}
#region 基本方法================================
///
/// 是否存在该记录
///
public bool Exists(int id)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(1) from " + databaseprefix + "article_category");
strSql.Append(" where id=@id");
SqlParameter[] parameters = {
new SqlParameter("@id", SqlDbType.Int,4)};
parameters[0].Value = id;
return DbHelperSQL.Exists(strSql.ToString(), parameters);
}
///
/// 增加一条数据
///
public int Add(Model.article_category model)
{
using (SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString))
{
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
{
try
{
#region 主表信息===========================
StringBuilder strSql = new StringBuilder();
StringBuilder str1 = new StringBuilder();//数据字段
StringBuilder str2 = new StringBuilder();//数据参数
//利用反射获得属性的所有公共属性
PropertyInfo[] pros = model.GetType().GetProperties();
List paras = new List();
strSql.Append("insert into " + databaseprefix + "article_category(");
foreach (PropertyInfo pi in pros)
{
//如果不是主键及List则追加sql字符串
if (!pi.Name.Equals("id") && !typeof(System.Collections.IList).IsAssignableFrom(pi.PropertyType))
{
//判断属性值是否为空
if (pi.GetValue(model, null) != null)
{
str1.Append(pi.Name + ",");//拼接字段
str2.Append("@" + pi.Name + ",");//声明参数
paras.Add(new SqlParameter("@" + pi.Name, pi.GetValue(model, null)));//对参数赋值
}
}
}
strSql.Append(str1.ToString().Trim(','));
strSql.Append(") values (");
strSql.Append(str2.ToString().Trim(','));
strSql.Append(") ");
strSql.Append(";select @@IDENTITY;");
object obj = DbHelperSQL.GetSingle(conn, trans, strSql.ToString(), paras.ToArray());
model.id = Convert.ToInt32(obj);
////查询父节点的深度赋值
//if (model.parent_id > 0)
//{
// Model.article_category model2 = GetModel(conn, trans, model.parent_id);
// model.class_list = model2.class_list + model.id + ",";
// model.class_layer = model2.class_layer + 1;
//}
//else
//{
// model.class_list = "," + model.id + ",";
// model.class_layer = 1;
//}
//修改节点列表和深度
//DbHelperSQL.ExecuteSql(conn, trans, "update " + databaseprefix + "article_category set class_list='" + model.class_list + "', class_layer=" + model.class_layer + " where id=" + model.id);
#endregion
trans.Commit();//提交事务
}
catch
{
trans.Rollback();//回滚事务
return 0;
}
}
}
return model.id;
}
///
/// 更新一条数据
///
public bool Update(Model.article_category model)
{
using (SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString))
{
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
{
try
{
#region 主表信息===========================
//先判断选中的父节点是否被包含
//if (IsContainNode(model.id, model.parent_id))
//{
// //查找旧数据
// Model.article_category oldModel = GetModel(model.id);
// //查找旧父节点数据
// string class_list = "," + model.parent_id + ",";
// int class_layer = 1;
// if (oldModel.parent_id > 0)
// {
// Model.article_category oldParentModel = GetModel(conn, trans, oldModel.parent_id);//带事务
// class_list = oldParentModel.class_list + model.parent_id + ",";
// class_layer = oldParentModel.class_layer + 1;
// }
// //先提升选中的父节点
// DbHelperSQL.ExecuteSql(conn, trans, "update " + databaseprefix + "article_category set parent_id=" + oldModel.parent_id + ",class_list='" + class_list + "', class_layer=" + class_layer + " where id=" + model.parent_id); //带事务
// UpdateChilds(conn, trans, model.parent_id);//带事务
//}
////更新子节点
//if (model.parent_id > 0)
//{
// Model.article_category model2 = GetModel(conn, trans, model.parent_id);//带事务
// model.class_list = model2.class_list + model.id + ",";
// model.class_layer = model2.class_layer + 1;
//}
//else
//{
// model.class_list = "," + model.id + ",";
// model.class_layer = 1;
//}
//更新本栏目类别信息
StringBuilder strSql = new StringBuilder();
StringBuilder str1 = new StringBuilder();
//利用反射获得属性的所有公共属性
PropertyInfo[] pros = model.GetType().GetProperties();
List paras = new List();
strSql.Append("update " + databaseprefix + "article_category set ");
foreach (PropertyInfo pi in pros)
{
//如果不是主键及List则追加sql字符串
if (!pi.Name.Equals("id") && !typeof(System.Collections.IList).IsAssignableFrom(pi.PropertyType))
{
//判断属性值是否为空
if (pi.GetValue(model, null) != null)
{
str1.Append(pi.Name + "=@" + pi.Name + ",");//声明参数
paras.Add(new SqlParameter("@" + pi.Name, pi.GetValue(model, null)));//对参数赋值
}
}
}
strSql.Append(str1.ToString().Trim(','));
strSql.Append(" where id=@id");
paras.Add(new SqlParameter("@id", model.id));
DbHelperSQL.ExecuteSql(conn, trans, strSql.ToString(), paras.ToArray());
//更新子节点
UpdateChilds(conn, trans, model.id);
#endregion
trans.Commit();//提交事务
}
catch (Exception ex)
{
trans.Rollback();//回滚事务
return false;
}
}
}
return true;
}
///
/// 删除一条数据
///
public bool Delete(int id)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("delete from " + databaseprefix + "article_category ");
strSql.Append(" where class_list like '%," + id + ",%'");
return DbHelperSQL.ExecuteSql(strSql.ToString()) > 0;
}
///
/// 删除多条数据
///
public bool DeleteBatch(string where)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("delete from " + databaseprefix + "article_category ");
/// strSql.Append(" where class_list like '%," + id + ",%'");
return DbHelperSQL.ExecuteSql(strSql.ToString()) > 0;
}
///
/// 得到一个对象实体
///
public Model.article_category GetModel(int id)
{
StringBuilder strSql = new StringBuilder();
StringBuilder str1 = new StringBuilder();
Model.article_category model = new Model.article_category();
//利用反射获得属性的所有公共属性
PropertyInfo[] pros = model.GetType().GetProperties();
foreach (PropertyInfo p in pros)
{
//拼接字段,忽略List
if (!typeof(System.Collections.IList).IsAssignableFrom(p.PropertyType))
{
if (p.Name == "parenttitle")
{
str1.Append("ct.title as " + p.Name + ",");
}
else
{
str1.Append("c." + p.Name + ",");
}
}
}
strSql.Append("select top 1 " + str1.ToString().Trim(','));
strSql.Append(" from " + databaseprefix + "article_category as c left join dt_article_category as ct on ct.id=c.parentid ");
strSql.Append(" where c.id=@id");
SqlParameter[] parameters = {
new SqlParameter("@id", SqlDbType.Int,4)};
parameters[0].Value = id;
DataTable dt = DbHelperSQL.Query(strSql.ToString(), parameters).Tables[0];
if (dt.Rows.Count > 0)
{
return DataRowToModel(dt.Rows[0]);
}
else
{
return null;
}
}
///
/// 取得所有类别列表
///
/// 父ID
/// 频道ID
///
public DataTable GetList(int parent_id)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from " + databaseprefix + "article_category");
strSql.Append(" order by sort asc,id desc");
DataSet ds = DbHelperSQL.Query(strSql.ToString());
DataTable oldData = ds.Tables[0] as DataTable;
if (oldData == null)
{
return null;
}
//复制结构
DataTable newData = oldData.Clone();
//调用迭代组合成DAGATABLE
GetChilds(oldData, newData, parent_id);
return newData;
}
#endregion
#region 扩展方法================================
///
/// 取得指定类别下的列表(一层)
///
/// 显示条数
/// 父ID
/// 频道ID
/// DataTable
public DataTable GetChildList(int top, int parent_id)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select ");
if (top > 0)
{
strSql.Append(" top " + top.ToString());
}
strSql.Append(" * ");
strSql.Append(" from " + databaseprefix + "article_category");
strSql.Append(" where parent_id=" + parent_id + " order by sort_id asc,id desc");
DataSet ds = DbHelperSQL.Query(strSql.ToString());
return ds.Tables[0];
}
///
/// 返回类别名称
///
public string GetTitle(int id)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select top 1 title from " + databaseprefix + "article_category");
strSql.Append(" where id=" + id);
string title = Convert.ToString(DbHelperSQL.GetSingle(strSql.ToString()));
if (string.IsNullOrEmpty(title))
{
return string.Empty;
}
return title;
}
///
/// 返回父节点的ID
///
public int GetParentId(int id)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select top 1 parent_id from " + databaseprefix + "article_category");
strSql.Append(" where id=" + id);
return Convert.ToInt32(DbHelperSQL.GetSingle(strSql.ToString()));
}
///
/// 修改一列数据
///
public bool UpdateField(int id, string strValue)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("update " + databaseprefix + "article_category set " + strValue);
strSql.Append(" where id=" + id);
return DbHelperSQL.ExecuteSql(strSql.ToString()) > 0;
}
///
/// 得到一个对象实体(重载,带事务)
///
public Model.article_category GetModel(SqlConnection conn, SqlTransaction trans, int id)
{
StringBuilder strSql = new StringBuilder();
StringBuilder str1 = new StringBuilder();
Model.article_category model = new Model.article_category();
//利用反射获得属性的所有公共属性
PropertyInfo[] pros = model.GetType().GetProperties();
foreach (PropertyInfo p in pros)
{
//拼接字段,忽略List
if (!p.Name.Equals("category_brands") && !p.Name.Equals("category_specs"))
{
str1.Append(p.Name + ",");
}
}
strSql.Append("select top 1 " + str1.ToString().Trim(','));
strSql.Append(" from " + databaseprefix + "article_category");
strSql.Append(" where id=@id");
SqlParameter[] parameters = {
new SqlParameter("@id", SqlDbType.Int,4)};
parameters[0].Value = id;
DataTable dt = DbHelperSQL.Query(conn, trans, strSql.ToString(), parameters).Tables[0];
if (dt.Rows.Count > 0)
{
return DataRowToModel(dt.Rows[0]);
}
else
{
return null;
}
}
///
/// 将对象转换实体
///
public Model.article_category DataRowToModel(DataRow row)
{
Model.article_category model = new Model.article_category();
if (row != null)
{
//利用反射获得属性的所有公共属性
Type modelType = model.GetType();
for (int i = 0; i < row.Table.Columns.Count; i++)
{
PropertyInfo proInfo = modelType.GetProperty(row.Table.Columns[i].ColumnName);
if (proInfo != null && row[i] != DBNull.Value)
{
proInfo.SetValue(model, row[i], null);//用索引值设置属性值
}
}
}
return model;
}
#endregion
#region 私有方法================================
///
/// 从内存中取得所有下级类别列表(自身迭代)
///
private void GetChilds(DataTable oldData, DataTable newData, int parent_id)
{
DataRow[] dr = oldData.Select("parentid=" + parent_id);
for (int i = 0; i < dr.Length; i++)
{
DataRow row = newData.NewRow();//创建新行
//循环查找列数量赋值
for (int j = 0; j < dr[i].Table.Columns.Count; j++)
{
row[dr[i].Table.Columns[j].ColumnName] = dr[i][dr[i].Table.Columns[j].ColumnName];
}
newData.Rows.Add(row);
//调用自身迭代
this.GetChilds(oldData, newData, int.Parse(dr[i]["id"].ToString()));
}
}
///
/// 修改子节点的ID列表及深度(自身迭代)
///
private void UpdateChilds(SqlConnection conn, SqlTransaction trans, int parent_id)
{
//查找父节点信息
Model.article_category model = GetModel(conn, trans, parent_id);
if (model != null)
{
//查找子节点
string strSql = "select id from " + databaseprefix + "article_category where parentid=" + parent_id;
DataSet ds = DbHelperSQL.Query(conn, trans, strSql);//带事务
foreach (DataRow dr in ds.Tables[0].Rows)
{
//修改子节点的ID列表及深度
int id = int.Parse(dr["id"].ToString());
//string class_list = model.class_list + id + ",";
//int class_layer = model.class_layer + 1;
//DbHelperSQL.ExecuteSql(conn, trans, "update " + databaseprefix + "article_category set class_list='" + class_list + "', class_layer=" + class_layer + " where id=" + id);//带事务
//调用自身迭代
this.UpdateChilds(conn, trans, id);//带事务
}
}
}
///
/// 验证节点是否被包含
///
/// 待查询的节点
/// 父节点
/// bool
private bool IsContainNode(int id, int parent_id)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(1) from " + databaseprefix + "article_category ");
strSql.Append(" where class_list like '%," + id + ",%' and id=" + parent_id);
return DbHelperSQL.Exists(strSql.ToString());
}
#endregion
}
}