using Newtonsoft.Json; using Serilog; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Xml; using WPFWCSDemo.Data; using WPFWCSDemo.Models.Tables; using WPFWCSDemo.StateCode; using WPFWCSDemo.ViewModels; namespace WPFWCSDemo.Utilities { public class SqlHelper { /// /// sql连接字符串,引用自【app.config】 /// public static string? ConStr { get; set; } /// /// 检查数据库是否连接正常 /// /// true-连接正常 false-连接失败 public static bool IsDBConnected() { using var context = new AppDbContext(); return context.Database.CanConnect(); } /// /// 获取数据集 /// /// sql执行语句 /// 可选的sql参数 /// 查询目标的数据集 public static DataSet GetDataSet(string cmdText, params SqlParameter[] sqlParameters) { //创建sql连接 using SqlConnection conn = new SqlConnection(ConStr); try { conn.Open(); } catch (Exception) { return null; } using SqlCommand cmd = new SqlCommand(cmdText, conn); cmd.Parameters.AddRange(sqlParameters); using SqlDataAdapter sda = new SqlDataAdapter(cmd); using DataSet ds = new DataSet(); sda.Fill(ds); //TableRefresh(cmdText); return ds; } /// /// 获取对应SQL查询的数据表 /// /// sql执行语句 /// 查询目标的数据表名 public static DataTable? ExecuteTable(string cmdText, params SqlParameter[] sqlParameters) { return GetDataSet(cmdText, sqlParameters).Tables[0]; } /// /// 获取某个表字段的集合 /// /// sql执行语句 /// 查询目标表字段/列名的值的集合 public static List GetColumns(string cmdText) { //创建用于存储列名的集合 List columns = new List(); //创建sql连接 using (SqlConnection conn = new SqlConnection(ConStr)) { try { conn.Open(); } catch (Exception) { return null; } SqlCommand cmd = new SqlCommand(cmdText, conn); SqlDataAdapter sda = new SqlDataAdapter(cmdText, conn); DataSet ds = new DataSet(); sda.Fill(ds); //将获取到的字段名添加到集合中 foreach (DataColumn colName in ds.Tables[0].Columns) { columns.Add(colName.ToString()); } return columns; } } /// /// 操作获取受影响的行数 /// /// sql语句 /// sql字段参数 /// public static int ExecuteNonQuery(string cmdText, params SqlParameter[] sqlParameters) { //创建sql连接 using (SqlConnection conn = new SqlConnection(ConStr)) { conn.Open(); using SqlCommand cmd = new SqlCommand(cmdText, conn); //sql参数化设置 cmd.Parameters.AddRange(sqlParameters); //MessageBox.Show(cmdText); //返回执行sql受影响的行数 int rows = cmd.ExecuteNonQuery(); if (rows > -1) { //throw new Exception("获取数据失败!(错误代码:000001)"); } //TableRefresh(cmdText); return rows; } } /// /// 获取查询数据的行数 /// /// SQL字符串 /// 目标行数 public static int GetRowCount(string cmdText, params SqlParameter[] sqlParameters) { using (DataTable dt = ExecuteTable(cmdText, sqlParameters)) { if (dt == null) { return 0; } return dt.Rows.Count; } } /// /// 获取为当前任务【自动生成】的WCS本地任务号 /// /// public static int GetTaskIdByAutoGeneration() { using DataTable dt = ExecuteTable("SELECT TASKNO FROM TASKNUMBER"); int taskId = (int)dt.Rows[0][0]; //此处定义9开头的任务号为手动添加的任务,因此自动生成的任务号小于9000 if (taskId > 899999) { ExecuteNonQuery("UPDATE TASKNUMBER SET TASKNO=@TaskNo WHERE TASKNO=@TaskId", new SqlParameter("@taskNo", 100001), new SqlParameter("@taskId", taskId)); return 100001; } else { ExecuteNonQuery("UPDATE TASKNUMBER SET TASKNO=@TaskNo WHERE TASKNO=@TaskId", new SqlParameter("@taskNo", taskId + 1), new SqlParameter("@taskId", taskId)); } return taskId; } /// /// 获取为当前任务【手动添加】的WCS本地任务号 /// /// public static int GetTaskIdByManualGeneration() { using DataTable dt = ExecuteTable("SELECT MAN_TASKNO FROM TASKNUMBER"); int taskId = (int)dt.Rows[0][0]; //此处定义9开头的任务号为手动添加的任务 if (taskId > 999999) { ExecuteNonQuery("UPDATE TASKNUMBER SET MAN_TASKNO=@Man_TaskNo WHERE MAN_TASKNO=@TaskId", new SqlParameter("@Man_TaskNo", 900000), new SqlParameter("@taskId", taskId)); return 900000; } else { ExecuteNonQuery("UPDATE TASKNUMBER SET MAN_TASKNO=@Man_TaskNo WHERE MAN_TASKNO=@TaskId", new SqlParameter("@Man_TaskNo", taskId + 1), new SqlParameter("@taskId", taskId)); } return taskId; } /// /// 获取为当前事件【手动添加】的编号 /// /// public static int GetEventIdByAutoGeneration() { using DataTable? dt = ExecuteTable("SELECT EVENT_TASKNO FROM TASKNUMBER"); int taskId = (int)dt.Rows[0][0]; //此处定义9开头的任务号为手动添加的任务 if (taskId > 9999) { ExecuteNonQuery("UPDATE TASKNUMBER SET EVENT_TASKNO=@Event_TaskNo WHERE EVENT_TASKNO=@TaskId", new SqlParameter("@Event_TaskNo", 1001), new SqlParameter("@taskId", taskId)); return 1001; } else { ExecuteNonQuery("UPDATE TASKNUMBER SET EVENT_TASKNO=@Event_TaskNo WHERE EVENT_TASKNO=@TaskId", new SqlParameter("@Event_TaskNo", taskId + 1), new SqlParameter("@taskId", taskId)); } return taskId; } /// /// 记录当前操作事件 /// /// 信息 /// 标识 /// 类型(登录、操作等) /// 来源(名称、数据集等) /// 级别 /// 状态(是否完成等) public static void NewEventLog(string message,string userId, string type, string source, string level, string status) { using var context = new AppDbContext(); Event_Log event_Log = new Event_Log() { Id = Guid.NewGuid(), Message = message, TimeStamp = DateTime.Now.ToString(TimeFormat.stringFormat), UserId = userId, Type = type, Source = source, Level = level, Status = status, }; context.Event_Log.Add(event_Log); context.SaveChanges(); Log.Warning($"【事件记录】{JsonConvert.SerializeObject(event_Log)}"); } /// /// 记录当前操作事件 /// /// 信息 /// 标识 /// 类型(登录、操作等) /// 来源(名称、数据集等) /// 级别 /// 状态(是否完成等) public static void NewEventLog(string message, string userId) { using var context = new AppDbContext(); Event_Log event_Log = new Event_Log() { Id = Guid.NewGuid(), Message = message, TimeStamp = DateTime.Now.ToString(TimeFormat.stringFormat), UserId = userId, }; context.Event_Log.Add(event_Log); context.SaveChanges(); Log.Warning($"【事件记录】{event_Log.UserId}-{event_Log.Message}"); } } }