using Models; using MySql.Data.MySqlClient; using SqlSugar; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Service { public class InitDB { public static string ConnectionString; public static void initDB(bool dropTable=false) { ConnectionConfig connectionConfig = new ConnectionConfig() { ConnectionString = ConnectionString, DbType = DbType.MySql, IsAutoCloseConnection = true }; //创建数据库对象 using (SqlSugarClient db = new SqlSugarClient(connectionConfig)) { db.Aop.OnLogExecuting = (sql, pars) => { Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响 }; //create db db.DbMaintenance.CreateDatabase(); //db.DbMaintenance.TruncateTable();//删除记录 //===建表 if (dropTable && db.DbMaintenance.IsAnyTable("Classes", false)) db.DbMaintenance.DropTable("Classes"); if (dropTable && db.DbMaintenance.IsAnyTable("Step", false)) db.DbMaintenance.DropTable("Steps"); if (dropTable && db.DbMaintenance.IsAnyTable("StepProcess", false)) db.DbMaintenance.DropTable("StepProcess"); if (dropTable && db.DbMaintenance.IsAnyTable("Product", false)) db.DbMaintenance.DropTable("Product"); if (dropTable && db.DbMaintenance.IsAnyTable("Attachment", false)) db.DbMaintenance.DropTable("Attachment"); if (dropTable && db.DbMaintenance.IsAnyTable("BatchHistory", false)) db.DbMaintenance.DropTable("BatchHistory"); if (dropTable && db.DbMaintenance.IsAnyTable("QualifiedCriterion", false)) db.DbMaintenance.DropTable("QualifiedCriterion"); if (dropTable && db.DbMaintenance.IsAnyTable("ProductReviseProcess", false)) db.DbMaintenance.DropTable("ProductReviseProcess");//????ProductReviseProcessList if (dropTable && db.DbMaintenance.IsAnyTable("ProductAssistProcess", false)) db.DbMaintenance.DropTable("ProductAssistProcess"); if (dropTable && db.DbMaintenance.IsAnyTable("Order", false)) db.DbMaintenance.DropTable("Order"); if (dropTable && db.DbMaintenance.IsAnyTable("OrderHistory", false)) db.DbMaintenance.DropTable("OrderHistory"); if (dropTable && db.DbMaintenance.IsAnyTable("SizeTagData", false)) db.DbMaintenance.DropTable("SizeTagData"); if (dropTable && db.DbMaintenance.IsAnyTable("DefectInfo", false)) db.DbMaintenance.DropTable("DefectInfo"); //===添加与更新表 db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); //更新新列数据 //==触发器 string rootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string sqlPath = rootPath + "\\SqlPath\\"; if (Directory.Exists(sqlPath)) { int count; string triggerName = "trigger_order_update"; if (File.Exists(sqlPath + triggerName+".sql")) { count = db.Ado.GetInt($"SELECT count(*) FROM information_schema.TRIGGERS where TRIGGER_NAME = '{triggerName}'"); if (count > 0) db.Ado.ExecuteCommand($"drop trigger {triggerName}"); db.Ado.ExecuteCommand(File.ReadAllText(sqlPath + triggerName + ".sql")); } } //==清理垃圾数据 db.Ado.ExecuteCommand($"delete from `Order` where ProductId not in (select id from product)"); } } /// /// 备份DB (还原:mysql -uroot -p < d:\dbName.sql) /// /// public static void BackupDataBase(string outFilePath) { using (var conn = new MySqlConnection(ConnectionString)) { using (var cmd = new MySqlCommand()) { using (MySqlBackup mb = new MySqlBackup(cmd)) { // 设置数据库连接 cmd.Connection = conn; cmd.Connection.Open(); // 导出数据库到文件 mb.ExportToFile(outFilePath); conn.Close(); } } } } private static string GetMD5(string str) { byte[] data = Encoding.UTF8.GetBytes(str); data = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(data); string ret = ""; for (int i = 0; i < data.Length; i++) { ret += data[i].ToString("x1").PadLeft(2, '0');//ToString("x1"):转换为16进制 } return ret.ToUpper(); } } }