Нет описания

article_category.cs 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Reflection;
  6. using System.Text;
  7. using CallCenterApi.DB;
  8. namespace CallCenterApi.DAL
  9. {
  10. /// <summary>
  11. /// 数据访问类:文章类别表
  12. /// </summary>
  13. public partial class article_category
  14. {
  15. private string databaseprefix;//数据库表名前缀
  16. public article_category(string _databaseprefix = "dt_")
  17. {
  18. databaseprefix = _databaseprefix;
  19. }
  20. #region 基本方法================================
  21. /// <summary>
  22. /// 是否存在该记录
  23. /// </summary>
  24. public bool Exists(int id)
  25. {
  26. StringBuilder strSql = new StringBuilder();
  27. strSql.Append("select count(1) from " + databaseprefix + "article_category");
  28. strSql.Append(" where id=@id");
  29. SqlParameter[] parameters = {
  30. new SqlParameter("@id", SqlDbType.Int,4)};
  31. parameters[0].Value = id;
  32. return DbHelperSQL.Exists(strSql.ToString(), parameters);
  33. }
  34. /// <summary>
  35. /// 增加一条数据
  36. /// </summary>
  37. public int Add(Model.article_category model)
  38. {
  39. using (SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString))
  40. {
  41. conn.Open();
  42. using (SqlTransaction trans = conn.BeginTransaction())
  43. {
  44. try
  45. {
  46. #region 主表信息===========================
  47. StringBuilder strSql = new StringBuilder();
  48. StringBuilder str1 = new StringBuilder();//数据字段
  49. StringBuilder str2 = new StringBuilder();//数据参数
  50. //利用反射获得属性的所有公共属性
  51. PropertyInfo[] pros = model.GetType().GetProperties();
  52. List<SqlParameter> paras = new List<SqlParameter>();
  53. strSql.Append("insert into " + databaseprefix + "article_category(");
  54. foreach (PropertyInfo pi in pros)
  55. {
  56. //如果不是主键及List<T>则追加sql字符串
  57. if (!pi.Name.Equals("id") && !typeof(System.Collections.IList).IsAssignableFrom(pi.PropertyType))
  58. {
  59. //判断属性值是否为空
  60. if (pi.GetValue(model, null) != null)
  61. {
  62. str1.Append(pi.Name + ",");//拼接字段
  63. str2.Append("@" + pi.Name + ",");//声明参数
  64. paras.Add(new SqlParameter("@" + pi.Name, pi.GetValue(model, null)));//对参数赋值
  65. }
  66. }
  67. }
  68. strSql.Append(str1.ToString().Trim(','));
  69. strSql.Append(") values (");
  70. strSql.Append(str2.ToString().Trim(','));
  71. strSql.Append(") ");
  72. strSql.Append(";select @@IDENTITY;");
  73. object obj = DbHelperSQL.GetSingle(conn, trans, strSql.ToString(), paras.ToArray());
  74. model.id = Convert.ToInt32(obj);
  75. ////查询父节点的深度赋值
  76. //if (model.parent_id > 0)
  77. //{
  78. // Model.article_category model2 = GetModel(conn, trans, model.parent_id);
  79. // model.class_list = model2.class_list + model.id + ",";
  80. // model.class_layer = model2.class_layer + 1;
  81. //}
  82. //else
  83. //{
  84. // model.class_list = "," + model.id + ",";
  85. // model.class_layer = 1;
  86. //}
  87. //修改节点列表和深度
  88. //DbHelperSQL.ExecuteSql(conn, trans, "update " + databaseprefix + "article_category set class_list='" + model.class_list + "', class_layer=" + model.class_layer + " where id=" + model.id);
  89. #endregion
  90. trans.Commit();//提交事务
  91. }
  92. catch
  93. {
  94. trans.Rollback();//回滚事务
  95. return 0;
  96. }
  97. }
  98. }
  99. return model.id;
  100. }
  101. /// <summary>
  102. /// 更新一条数据
  103. /// </summary>
  104. public bool Update(Model.article_category model)
  105. {
  106. using (SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString))
  107. {
  108. conn.Open();
  109. using (SqlTransaction trans = conn.BeginTransaction())
  110. {
  111. try
  112. {
  113. #region 主表信息===========================
  114. //先判断选中的父节点是否被包含
  115. //if (IsContainNode(model.id, model.parent_id))
  116. //{
  117. // //查找旧数据
  118. // Model.article_category oldModel = GetModel(model.id);
  119. // //查找旧父节点数据
  120. // string class_list = "," + model.parent_id + ",";
  121. // int class_layer = 1;
  122. // if (oldModel.parent_id > 0)
  123. // {
  124. // Model.article_category oldParentModel = GetModel(conn, trans, oldModel.parent_id);//带事务
  125. // class_list = oldParentModel.class_list + model.parent_id + ",";
  126. // class_layer = oldParentModel.class_layer + 1;
  127. // }
  128. // //先提升选中的父节点
  129. // 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); //带事务
  130. // UpdateChilds(conn, trans, model.parent_id);//带事务
  131. //}
  132. ////更新子节点
  133. //if (model.parent_id > 0)
  134. //{
  135. // Model.article_category model2 = GetModel(conn, trans, model.parent_id);//带事务
  136. // model.class_list = model2.class_list + model.id + ",";
  137. // model.class_layer = model2.class_layer + 1;
  138. //}
  139. //else
  140. //{
  141. // model.class_list = "," + model.id + ",";
  142. // model.class_layer = 1;
  143. //}
  144. //更新本栏目类别信息
  145. StringBuilder strSql = new StringBuilder();
  146. StringBuilder str1 = new StringBuilder();
  147. //利用反射获得属性的所有公共属性
  148. PropertyInfo[] pros = model.GetType().GetProperties();
  149. List<SqlParameter> paras = new List<SqlParameter>();
  150. strSql.Append("update " + databaseprefix + "article_category set ");
  151. foreach (PropertyInfo pi in pros)
  152. {
  153. //如果不是主键及List<T>则追加sql字符串
  154. if (!pi.Name.Equals("id") && !typeof(System.Collections.IList).IsAssignableFrom(pi.PropertyType))
  155. {
  156. //判断属性值是否为空
  157. if (pi.GetValue(model, null) != null)
  158. {
  159. str1.Append(pi.Name + "=@" + pi.Name + ",");//声明参数
  160. paras.Add(new SqlParameter("@" + pi.Name, pi.GetValue(model, null)));//对参数赋值
  161. }
  162. }
  163. }
  164. strSql.Append(str1.ToString().Trim(','));
  165. strSql.Append(" where id=@id");
  166. paras.Add(new SqlParameter("@id", model.id));
  167. DbHelperSQL.ExecuteSql(conn, trans, strSql.ToString(), paras.ToArray());
  168. //更新子节点
  169. UpdateChilds(conn, trans, model.id);
  170. #endregion
  171. trans.Commit();//提交事务
  172. }
  173. catch (Exception ex)
  174. {
  175. trans.Rollback();//回滚事务
  176. return false;
  177. }
  178. }
  179. }
  180. return true;
  181. }
  182. /// <summary>
  183. /// 删除一条数据
  184. /// </summary>
  185. public bool Delete(int id)
  186. {
  187. StringBuilder strSql = new StringBuilder();
  188. strSql.Append("delete from " + databaseprefix + "article_category ");
  189. strSql.Append(" where class_list like '%," + id + ",%'");
  190. return DbHelperSQL.ExecuteSql(strSql.ToString()) > 0;
  191. }
  192. /// <summary>
  193. /// 删除多条数据
  194. /// </summary>
  195. public bool DeleteBatch(string where)
  196. {
  197. StringBuilder strSql = new StringBuilder();
  198. strSql.Append("delete from " + databaseprefix + "article_category ");
  199. /// strSql.Append(" where class_list like '%," + id + ",%'");
  200. return DbHelperSQL.ExecuteSql(strSql.ToString()) > 0;
  201. }
  202. /// <summary>
  203. /// 得到一个对象实体
  204. /// </summary>
  205. public Model.article_category GetModel(int id)
  206. {
  207. StringBuilder strSql = new StringBuilder();
  208. StringBuilder str1 = new StringBuilder();
  209. Model.article_category model = new Model.article_category();
  210. //利用反射获得属性的所有公共属性
  211. PropertyInfo[] pros = model.GetType().GetProperties();
  212. foreach (PropertyInfo p in pros)
  213. {
  214. //拼接字段,忽略List<T>
  215. if (!typeof(System.Collections.IList).IsAssignableFrom(p.PropertyType))
  216. {
  217. if (p.Name == "parenttitle")
  218. {
  219. str1.Append("ct.title as " + p.Name + ",");
  220. }
  221. else
  222. {
  223. str1.Append("c." + p.Name + ",");
  224. }
  225. }
  226. }
  227. strSql.Append("select top 1 " + str1.ToString().Trim(','));
  228. strSql.Append(" from " + databaseprefix + "article_category as c left join dt_article_category as ct on ct.id=c.parentid ");
  229. strSql.Append(" where c.id=@id");
  230. SqlParameter[] parameters = {
  231. new SqlParameter("@id", SqlDbType.Int,4)};
  232. parameters[0].Value = id;
  233. DataTable dt = DbHelperSQL.Query(strSql.ToString(), parameters).Tables[0];
  234. if (dt.Rows.Count > 0)
  235. {
  236. return DataRowToModel(dt.Rows[0]);
  237. }
  238. else
  239. {
  240. return null;
  241. }
  242. }
  243. /// <summary>
  244. /// 取得所有类别列表
  245. /// </summary>
  246. /// <param name="parent_id">父ID</param>
  247. /// <param name="channel_id">频道ID</param>
  248. /// <returns></returns>
  249. public DataTable GetList(int parent_id)
  250. {
  251. StringBuilder strSql = new StringBuilder();
  252. strSql.Append("select * from " + databaseprefix + "article_category");
  253. strSql.Append(" order by sort asc,id desc");
  254. DataSet ds = DbHelperSQL.Query(strSql.ToString());
  255. DataTable oldData = ds.Tables[0] as DataTable;
  256. if (oldData == null)
  257. {
  258. return null;
  259. }
  260. //复制结构
  261. DataTable newData = oldData.Clone();
  262. //调用迭代组合成DAGATABLE
  263. GetChilds(oldData, newData, parent_id);
  264. return newData;
  265. }
  266. #endregion
  267. #region 扩展方法================================
  268. /// <summary>
  269. /// 取得指定类别下的列表(一层)
  270. /// </summary>
  271. /// <param name="top">显示条数</param>
  272. /// <param name="parent_id">父ID</param>
  273. /// <param name="channel_id">频道ID</param>
  274. /// <returns>DataTable</returns>
  275. public DataTable GetChildList(int top, int parent_id)
  276. {
  277. StringBuilder strSql = new StringBuilder();
  278. strSql.Append("select ");
  279. if (top > 0)
  280. {
  281. strSql.Append(" top " + top.ToString());
  282. }
  283. strSql.Append(" * ");
  284. strSql.Append(" from " + databaseprefix + "article_category");
  285. strSql.Append(" where parent_id=" + parent_id + " order by sort_id asc,id desc");
  286. DataSet ds = DbHelperSQL.Query(strSql.ToString());
  287. return ds.Tables[0];
  288. }
  289. /// <summary>
  290. /// 返回类别名称
  291. /// </summary>
  292. public string GetTitle(int id)
  293. {
  294. StringBuilder strSql = new StringBuilder();
  295. strSql.Append("select top 1 title from " + databaseprefix + "article_category");
  296. strSql.Append(" where id=" + id);
  297. string title = Convert.ToString(DbHelperSQL.GetSingle(strSql.ToString()));
  298. if (string.IsNullOrEmpty(title))
  299. {
  300. return string.Empty;
  301. }
  302. return title;
  303. }
  304. /// <summary>
  305. /// 返回父节点的ID
  306. /// </summary>
  307. public int GetParentId(int id)
  308. {
  309. StringBuilder strSql = new StringBuilder();
  310. strSql.Append("select top 1 parent_id from " + databaseprefix + "article_category");
  311. strSql.Append(" where id=" + id);
  312. return Convert.ToInt32(DbHelperSQL.GetSingle(strSql.ToString()));
  313. }
  314. /// <summary>
  315. /// 修改一列数据
  316. /// </summary>
  317. public bool UpdateField(int id, string strValue)
  318. {
  319. StringBuilder strSql = new StringBuilder();
  320. strSql.Append("update " + databaseprefix + "article_category set " + strValue);
  321. strSql.Append(" where id=" + id);
  322. return DbHelperSQL.ExecuteSql(strSql.ToString()) > 0;
  323. }
  324. /// <summary>
  325. /// 得到一个对象实体(重载,带事务)
  326. /// </summary>
  327. public Model.article_category GetModel(SqlConnection conn, SqlTransaction trans, int id)
  328. {
  329. StringBuilder strSql = new StringBuilder();
  330. StringBuilder str1 = new StringBuilder();
  331. Model.article_category model = new Model.article_category();
  332. //利用反射获得属性的所有公共属性
  333. PropertyInfo[] pros = model.GetType().GetProperties();
  334. foreach (PropertyInfo p in pros)
  335. {
  336. //拼接字段,忽略List<T>
  337. if (!p.Name.Equals("category_brands") && !p.Name.Equals("category_specs"))
  338. {
  339. str1.Append(p.Name + ",");
  340. }
  341. }
  342. strSql.Append("select top 1 " + str1.ToString().Trim(','));
  343. strSql.Append(" from " + databaseprefix + "article_category");
  344. strSql.Append(" where id=@id");
  345. SqlParameter[] parameters = {
  346. new SqlParameter("@id", SqlDbType.Int,4)};
  347. parameters[0].Value = id;
  348. DataTable dt = DbHelperSQL.Query(conn, trans, strSql.ToString(), parameters).Tables[0];
  349. if (dt.Rows.Count > 0)
  350. {
  351. return DataRowToModel(dt.Rows[0]);
  352. }
  353. else
  354. {
  355. return null;
  356. }
  357. }
  358. /// <summary>
  359. /// 将对象转换实体
  360. /// </summary>
  361. public Model.article_category DataRowToModel(DataRow row)
  362. {
  363. Model.article_category model = new Model.article_category();
  364. if (row != null)
  365. {
  366. //利用反射获得属性的所有公共属性
  367. Type modelType = model.GetType();
  368. for (int i = 0; i < row.Table.Columns.Count; i++)
  369. {
  370. PropertyInfo proInfo = modelType.GetProperty(row.Table.Columns[i].ColumnName);
  371. if (proInfo != null && row[i] != DBNull.Value)
  372. {
  373. proInfo.SetValue(model, row[i], null);//用索引值设置属性值
  374. }
  375. }
  376. }
  377. return model;
  378. }
  379. #endregion
  380. #region 私有方法================================
  381. /// <summary>
  382. /// 从内存中取得所有下级类别列表(自身迭代)
  383. /// </summary>
  384. private void GetChilds(DataTable oldData, DataTable newData, int parent_id)
  385. {
  386. DataRow[] dr = oldData.Select("parentid=" + parent_id);
  387. for (int i = 0; i < dr.Length; i++)
  388. {
  389. DataRow row = newData.NewRow();//创建新行
  390. //循环查找列数量赋值
  391. for (int j = 0; j < dr[i].Table.Columns.Count; j++)
  392. {
  393. row[dr[i].Table.Columns[j].ColumnName] = dr[i][dr[i].Table.Columns[j].ColumnName];
  394. }
  395. newData.Rows.Add(row);
  396. //调用自身迭代
  397. this.GetChilds(oldData, newData, int.Parse(dr[i]["id"].ToString()));
  398. }
  399. }
  400. /// <summary>
  401. /// 修改子节点的ID列表及深度(自身迭代)
  402. /// </summary>
  403. private void UpdateChilds(SqlConnection conn, SqlTransaction trans, int parent_id)
  404. {
  405. //查找父节点信息
  406. Model.article_category model = GetModel(conn, trans, parent_id);
  407. if (model != null)
  408. {
  409. //查找子节点
  410. string strSql = "select id from " + databaseprefix + "article_category where parentid=" + parent_id;
  411. DataSet ds = DbHelperSQL.Query(conn, trans, strSql);//带事务
  412. foreach (DataRow dr in ds.Tables[0].Rows)
  413. {
  414. //修改子节点的ID列表及深度
  415. int id = int.Parse(dr["id"].ToString());
  416. //string class_list = model.class_list + id + ",";
  417. //int class_layer = model.class_layer + 1;
  418. //DbHelperSQL.ExecuteSql(conn, trans, "update " + databaseprefix + "article_category set class_list='" + class_list + "', class_layer=" + class_layer + " where id=" + id);//带事务
  419. //调用自身迭代
  420. this.UpdateChilds(conn, trans, id);//带事务
  421. }
  422. }
  423. }
  424. /// <summary>
  425. /// 验证节点是否被包含
  426. /// </summary>
  427. /// <param name="id">待查询的节点</param>
  428. /// <param name="parent_id">父节点</param>
  429. /// <returns>bool</returns>
  430. private bool IsContainNode(int id, int parent_id)
  431. {
  432. StringBuilder strSql = new StringBuilder();
  433. strSql.Append("select count(1) from " + databaseprefix + "article_category ");
  434. strSql.Append(" where class_list like '%," + id + ",%' and id=" + parent_id);
  435. return DbHelperSQL.Exists(strSql.ToString());
  436. }
  437. #endregion
  438. }
  439. }