Files
FT479/WPFWCSDemo/Utilities/SqlHelper.cs
2026-06-29 14:46:32 +08:00

324 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
{
/// <summary>
/// sql连接字符串,引用自【app.config】
/// </summary>
public static string? ConStr { get; set; }
/// <summary>
/// 检查数据库是否连接正常
/// </summary>
/// <returns>true-连接正常 false-连接失败</returns>
public static bool IsDBConnected()
{
using var context = new AppDbContext();
return context.Database.CanConnect();
}
/// <summary>
/// 获取数据集
/// </summary>
/// <param name="cmdText">sql执行语句</param>
/// <param name="sqlParameters">可选的sql参数</param>
/// <returns>查询目标的数据集</returns>
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;
}
/// <summary>
/// 获取对应SQL查询的数据表
/// </summary>
/// <param name="cmdText">sql执行语句</param>
/// <returns>查询目标的数据表名</returns>
public static DataTable? ExecuteTable(string cmdText, params SqlParameter[] sqlParameters)
{
return GetDataSet(cmdText, sqlParameters).Tables[0];
}
/// <summary>
/// 获取某个表字段的集合
/// </summary>
/// <param name="cmdText">sql执行语句</param>
/// <returns>查询目标表字段/列名的值的集合</returns>
public static List<string> GetColumns(string cmdText)
{
//创建用于存储列名的集合
List<string> columns = new List<string>();
//创建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;
}
}
/// <summary>
/// 操作获取受影响的行数
/// </summary>
/// <param name="cmdText">sql语句</param>
/// <param name="sqlParameters">sql字段参数</param>
/// <returns></returns>
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;
}
}
/// <summary>
/// 获取查询数据的行数
/// </summary>
/// <param name="cmdText">SQL字符串</param>
/// <returns>目标行数</returns>
public static int GetRowCount(string cmdText, params SqlParameter[] sqlParameters)
{
using (DataTable dt = ExecuteTable(cmdText, sqlParameters))
{
if (dt == null)
{
return 0;
}
return dt.Rows.Count;
}
}
/// <summary>
/// 获取为当前任务【自动生成】的WCS本地任务号
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 获取为当前任务【手动添加】的WCS本地任务号
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 获取为当前事件【手动添加】的编号
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 记录当前操作事件
/// </summary>
/// <param name="message">信息</param>
/// <param name="userId">标识</param>
/// <param name="type">类型(登录、操作等)</param>
/// <param name="source">来源(名称、数据集等)</param>
/// <param name="level">级别</param>
/// <param name="status">状态(是否完成等)</param>
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)}");
}
/// <summary>
/// 记录当前操作事件
/// </summary>
/// <param name="message">信息</param>
/// <param name="userId">标识</param>
/// <param name="type">类型(登录、操作等)</param>
/// <param name="source">来源(名称、数据集等)</param>
/// <param name="level">级别</param>
/// <param name="status">状态(是否完成等)</param>
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}");
}
}
}