访问数据库的泛型封装类

川长思鸟来 2023-07-19 04:53 67阅读 0赞
  1. /// <summary>
  2. /// 新增
  3. /// </summary>
  4. /// <typeparam name="T">实体类</typeparam>
  5. /// <param name="t">对象</param>
  6. /// <param name="flag">返回主键还是都影响行数 false 受影响行数 true 主键值</param>
  7. /// <returns></returns>
  8. public int Insert<T>(T t, bool flag = false)
  9. {
  10. List<PropertyInfo> propertyInfos = new List<PropertyInfo>(typeof(T).GetProperties());
  11. //获取主键
  12. PropertyInfo pkey = propertyInfos.Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault();
  13. propertyInfos.Remove(pkey);
  14. StringBuilder builder = new StringBuilder();
  15. builder.Append("insert into ").Append(typeof(T).Name).Append("(");
  16. StringBuilder valueBuilder = new StringBuilder();
  17. valueBuilder.Append(" values( ");
  18. for (int i = 0; i < propertyInfos.Count; i++)
  19. {
  20. PropertyInfo item = propertyInfos[i];
  21. if (item.GetValue(t) != null)
  22. {
  23. builder.Append(item.Name);
  24. valueBuilder.Append("'");
  25. valueBuilder.Append(item.GetValue(t));
  26. valueBuilder.Append("'");
  27. if (i < propertyInfos.Count - 1)
  28. {
  29. builder.Append(",");
  30. valueBuilder.Append(",");
  31. }
  32. }
  33. }
  34. builder.Append(" ) ");
  35. valueBuilder.Append(" )");
  36. if (flag)
  37. builder.Append(" output inserted.").Append(pkey.Name);
  38. builder.Append(valueBuilder);
  39. using (SqlConnection conn = new SqlConnection(_connstr))
  40. {
  41. conn.Open();
  42. using (SqlCommand cmd = new SqlCommand(builder.ToString(), conn))
  43. {
  44. if (flag)
  45. return Convert.ToInt32(cmd.ExecuteScalar());//返回最新的主键
  46. else
  47. return cmd.ExecuteNonQuery();//返回受影响行数
  48. }
  49. }
  50. }
  51. /// <summary>
  52. /// 修改
  53. /// </summary>
  54. /// <typeparam name="T"></typeparam>
  55. /// <param name="t"></param>
  56. /// <returns></returns>
  57. public int Update<T>(T t)
  58. {
  59. List<PropertyInfo> propertyInfos = new List<PropertyInfo>(typeof(T).GetProperties());
  60. //获取主键
  61. PropertyInfo pkey = propertyInfos.Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault();
  62. propertyInfos.Remove(pkey);
  63. StringBuilder builder = new StringBuilder();
  64. builder.Append("update ").Append(typeof(T).Name).Append(" set ");
  65. for (int i = 0; i < propertyInfos.Count; i++)
  66. {
  67. PropertyInfo item = propertyInfos[i];
  68. if (item.GetValue(t) != null)
  69. {
  70. builder.Append(item.Name);
  71. builder.Append("='");
  72. builder.Append(item.GetValue(t));
  73. builder.Append("'");
  74. if (i < propertyInfos.Count - 1)
  75. builder.Append(",");
  76. }
  77. }
  78. builder.Append(" where ");
  79. builder.Append(pkey.Name);
  80. builder.Append("='");
  81. builder.Append(pkey.GetValue(t));
  82. builder.Append("'");
  83. using (SqlConnection conn = new SqlConnection(_connstr))
  84. {
  85. conn.Open();
  86. using (SqlCommand cmd = new SqlCommand(builder.ToString(), conn))
  87. {
  88. return cmd.ExecuteNonQuery();
  89. }
  90. }
  91. }

发表评论

表情:
评论列表 (有 0 条评论,67人围观)

还没有评论,来说两句吧...

相关阅读