革博士程序V1仓库
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

182 řádky
9.3 KiB

  1. using Models;
  2. using MySql.Data.MySqlClient;
  3. using SqlSugar;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace Service
  10. {
  11. public class InitDB
  12. {
  13. public static string ConnectionString;
  14. public static void initDB(string dbConStr,bool dropTable=false)
  15. {
  16. ConnectionString = dbConStr;
  17. ConnectionConfig connectionConfig = new ConnectionConfig() {
  18. ConnectionString = dbConStr,
  19. DbType = DbType.MySql,
  20. IsAutoCloseConnection = true
  21. };
  22. connectionConfig.ConnectionString = dbConStr;
  23. //创建数据库对象
  24. using (SqlSugarClient db = new SqlSugarClient(connectionConfig)) {
  25. db.Aop.OnLogExecuting = (sql, pars) =>
  26. {
  27. Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
  28. };
  29. //create db
  30. db.DbMaintenance.CreateDatabase();
  31. //===建表
  32. if (dropTable && db.DbMaintenance.IsAnyTable("Right", false)) db.DbMaintenance.DropTable("Right");
  33. if (dropTable && db.DbMaintenance.IsAnyTable("Role", false)) db.DbMaintenance.DropTable("Role");
  34. if (dropTable && db.DbMaintenance.IsAnyTable("RoleRightMap", false)) db.DbMaintenance.DropTable("RoleRightMap");
  35. if (dropTable && db.DbMaintenance.IsAnyTable("User", false)) db.DbMaintenance.DropTable("Users");
  36. if (dropTable && db.DbMaintenance.IsAnyTable("Classes", false)) db.DbMaintenance.DropTable("Classes");
  37. if (dropTable && db.DbMaintenance.IsAnyTable("Product", false)) db.DbMaintenance.DropTable("Product");
  38. if (dropTable && db.DbMaintenance.IsAnyTable("QualifiedLimit", false)) db.DbMaintenance.DropTable("QualifiedLimit");
  39. if (dropTable && db.DbMaintenance.IsAnyTable("GradeLimit", false)) db.DbMaintenance.DropTable("GradeLimit");
  40. if (dropTable && db.DbMaintenance.IsAnyTable("Records", false)) db.DbMaintenance.DropTable("Records");
  41. if (dropTable && db.DbMaintenance.IsAnyTable("DefectInfo", false)) db.DbMaintenance.DropTable("DefectInfo");
  42. //===添加与更新表
  43. db.CodeFirst.InitTables<Models.Right>();
  44. db.CodeFirst.InitTables<Models.Role>();
  45. db.CodeFirst.InitTables<Models.RoleRightMap>();
  46. db.CodeFirst.InitTables<Models.User>();
  47. db.CodeFirst.InitTables<Models.Classes>();
  48. db.CodeFirst.InitTables<Models.Product>();
  49. db.CodeFirst.InitTables<Models.QualifiedLimit>();
  50. db.CodeFirst.InitTables<Models.GradeLimit>();
  51. db.CodeFirst.InitTables<Models.Records>();
  52. db.CodeFirst.InitTables<Models.DefectInfo>();
  53. //更改表数据
  54. try
  55. {
  56. db.Ado.ExecuteCommand("drop index index_Records_ProductId_SerialNum ON table_name");//删除索引
  57. }
  58. catch { }
  59. //===初始数据 注意*********会清空这些表数据
  60. //清空表数据
  61. //db.DbMaintenance.TruncateTable<User>();
  62. //db.DbMaintenance.TruncateTable<Role>();
  63. if (db.Queryable<Models.User>().Count() < 1 && db.Queryable<Models.Role>().Count() < 1)
  64. {
  65. db.InsertNav(new Models.User()
  66. {
  67. Code = "admin",
  68. Name = "管理员",
  69. Password = GetMD5(""),
  70. RoleInfo = new Models.Role() { Code = "admin", Name = "管理员", ModifyUserCode = "admin", CreateUserCode = "admin" },//多表添加
  71. CreateUserCode = "admin",
  72. ModifyUserCode = "admin",
  73. }).Include(x => x.RoleInfo)
  74. .ExecuteCommand();
  75. db.Insertable(new Models.Role()
  76. {
  77. Code = "user",
  78. Name = "操作员",
  79. CreateUserCode = "admin",
  80. ModifyUserCode = "admin",
  81. }).ExecuteCommand();
  82. }
  83. //===权限
  84. //db.DbMaintenance.TruncateTable<RoleRightMap>();
  85. //db.DbMaintenance.TruncateTable<Right>();
  86. //if (db.Queryable<Models.Right>().Where(m => m.Code == "Step").Count() < 1) db.Insertable(new Models.Right("Step", "流程管理")).ExecuteCommand();
  87. //if (db.Queryable<Models.Right>().Where(m => m.Code == "Product").Count() < 1) db.Insertable(new Models.Right("Product", "产品管理")).ExecuteCommand();
  88. //if (db.Queryable<Models.Right>().Where(m => m.Code == "Debug").Count() < 1) db.Insertable(new Models.Right("Debug", "设备调试")).ExecuteCommand();
  89. //if (db.Queryable<Models.Right>().Where(m => m.Code == "Order").Count() < 1) db.Insertable(new Models.Right("Order", "报表查询")).ExecuteCommand();
  90. //if (db.Queryable<Models.Right>().Where(m => m.Code == "Statistics").Count() < 1) db.Insertable(new Models.Right("Statistics", "统计分析")).ExecuteCommand();
  91. //if (db.Queryable<Models.Right>().Where(m => m.Code == "Role").Count() < 1) db.Insertable(new Models.Right("Role", "角色管理")).ExecuteCommand();
  92. //if (db.Queryable<Models.Right>().Where(m => m.Code == "User").Count() < 1) db.Insertable(new Models.Right("User", "用户管理")).ExecuteCommand();
  93. //if (db.Queryable<Models.Right>().Where(m => m.Code == "Right").Count() < 1) db.Insertable(new Models.Right("Right", "权限管理")).ExecuteCommand();
  94. //if (db.Queryable<Models.Right>().Where(m => m.Code == "HeightBase").Count() < 1) db.Insertable(new Models.Right("HeightBase", "高度Base校正")).ExecuteCommand();
  95. //if (db.Queryable<Models.Right>().Where(m => m.Code == "SysSetting").Count() < 1) db.Insertable(new Models.Right("SysSetting", "系统设置")).ExecuteCommand();
  96. //if (db.Queryable<Models.Right>().Where(m => m.Code == "CmdSetting").Count() < 1) db.Insertable(new Models.Right("CmdSetting", "指令设置")).ExecuteCommand();
  97. //if (db.Queryable<Models.Right>().Where(m => m.Code == "PTSetting").Count() < 1) db.Insertable(new Models.Right("PTSetting", "点位设置")).ExecuteCommand();
  98. }
  99. }
  100. /// <summary>
  101. /// 备份DB (还原:mysql -uroot -p < d:\dbName.sql)
  102. /// </summary>
  103. /// <param name="result"></param>
  104. public static void BackupDataBase(string outFilePath)
  105. {
  106. using (var conn = new MySqlConnection(ConnectionString))
  107. {
  108. using (var cmd = new MySqlCommand())
  109. {
  110. using (MySqlBackup mb = new MySqlBackup(cmd))
  111. {
  112. // 设置数据库连接
  113. cmd.Connection = conn;
  114. cmd.Connection.Open();
  115. // 导出数据库到文件
  116. mb.ExportToFile(outFilePath);
  117. conn.Close();
  118. }
  119. }
  120. }
  121. }
  122. /// <summary>
  123. /// 还原数据库
  124. /// </summary>
  125. /// <param name="strPath">指定还原文件***.sql的绝对路径</param>
  126. /// <param name="dbName">还原到指定数据库</param>
  127. /// <returns></returns>
  128. public static bool RestoreDB(string strPath, string dbName = "LeatherDB")
  129. {
  130. bool isImport = false;
  131. if (string.IsNullOrEmpty(strPath))
  132. {
  133. return isImport;
  134. }
  135. using (var conn = new MySqlConnection(ConnectionString))
  136. {
  137. using (var cmd = new MySqlCommand())
  138. {
  139. using (MySqlBackup backCmd = new MySqlBackup(cmd))
  140. {
  141. // 设置数据库连接
  142. cmd.Connection = conn;
  143. cmd.Connection.Open();
  144. //导入备份
  145. //backCmd.ImportInfo.TargetDatabase = dbName;//前提条件 当前 myconn 中的用户有建库等系列权限
  146. //backCmd.ImportInfo.DatabaseDefaultCharSet = "utf8";
  147. backCmd.ImportFromFile(strPath);
  148. conn.Close();
  149. isImport = true;
  150. }
  151. }
  152. }
  153. return isImport;
  154. }
  155. private static string GetMD5(string str)
  156. {
  157. byte[] data = Encoding.UTF8.GetBytes(str);
  158. data = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(data);
  159. string ret = "";
  160. for (int i = 0; i < data.Length; i++)
  161. {
  162. ret += data[i].ToString("x1").PadLeft(2, '0');//ToString("x1"):转换为16进制
  163. }
  164. return ret.ToUpper();
  165. }
  166. }
  167. }