using FreeSql; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Comm.DBItem; using WIDESEA_Core.DBManager; using WIDESEA_Core.Extensions; using static Dapper.SqlMapper; namespace WIDESEA_WCS.JobsPart.Common { public class StoredProcedure { /// /// 创建存储过程 /// public static void Main(T entity, string MethodName) where T : class { //string storedProcedureName = "MyNewStoredProcedure"; using (SqlConnection connection = new SqlConnection(DBServerProvider.GetConnectionString())) { string ProcedureName = MethodName + entity.GetType().Name; string sqlCommand = $"CREATE PROCEDURE {ProcedureName} "; connection.Open(); if (MethodName == "Add") sqlCommand += Add(entity); if (MethodName == "Delete") sqlCommand += Delete(entity); // 创建存储过程的SQL脚本 //string sqlCommand = $@" //CREATE PROCEDURE {ProcedureName} //AS //BEGIN //SELECT * FROM {TableName} //END"; using (SqlCommand command = new SqlCommand(sqlCommand, connection)) { command.ExecuteNonQuery(); Console.WriteLine($"存储过程 {ProcedureName} 已创建。"); } } } #region 添加的存储过程 public static string Add(T entity) where T : class { //string sqlCommand = $"CREATE PROCEDURE {ProcedureName} "; string sql = string.Empty; string values = string.Empty; string Params = string.Empty; PropertyInfo[] propertyInfos = typeof(T).GetProperties(); foreach (PropertyInfo propertyInfo in propertyInfos) { var ValueType = propertyInfo.GetColumnType(true).Value; //sqlCommand += $@"@{propertyInfo.Name} {value}"; sql += sql == string.Empty ? $"@{propertyInfo.Name} {ValueType}" : $",@{propertyInfo.Name} {ValueType}"; values += values == string.Empty ? propertyInfo.Name : "," + propertyInfo.Name; Params += Params == string.Empty ? "@" + propertyInfo.Name : ",@" + propertyInfo.Name; //var name = "@" + propertyInfo.Name; //var value = propertyInfo.GetValue(entity, null); } //sqlCommand += $"{sql} AS\nBEGIN\nINSERT INTO {entity.GetType().Name} ({values}) VALUES ({Params}) END GO"; return $"{sql} AS\nBEGIN\nINSERT INTO {entity.GetType().Name} ({values}) VALUES ({Params}) END"; } #endregion #region 删除的存储过程 public static string Delete(T entity) where T : class { PropertyInfo[] propertyInfos = typeof(T).GetProperties(); var key = propertyInfos.GetKeyName(true); var name = propertyInfos.GetKeyProperty().Name; var value = propertyInfos.GetKeyProperty().GetValue(entity, null); string sql = $"@{name} {key} AS\nBEGIN\nDELETE FROM {entity.GetType().Name} WHERE {name}='{value}' END GO"; return sql; } #endregion #region 调用存储过程 /// /// 调用存储过程 /// /// 存储过程名称 /// 参数1 public static void EXEC(string ProcedureName, object Param1) { using (SqlConnection conn = new SqlConnection(DBServerProvider.GetConnectionString())) { SqlCommand cmd = new SqlCommand("DeleteOldRecords", conn);//存储过程名称 cmd.CommandType = CommandType.StoredProcedure; //PropertyInfo[] propertyInfos = typeof(Param1).GetProperties(); //cmd.Parameters.AddWithValue("@Param1", "Value1");//参数1 cmd.Parameters.AddWithValue("@MonthsAgo", 6);//参数2 conn.Open(); var count = cmd.ExecuteNonQuery(); if (count > 0) { } } } #endregion /// /// 调用添加存储过程 /// /// /// /// 存储过程名称 public static void EXECAdd(T entity, string MethodName) where T : class { string ProcedureName = MethodName + entity.GetType().Name; using (SqlConnection conn = new SqlConnection(DBServerProvider.GetConnectionString())) { SqlCommand cmd = new SqlCommand(ProcedureName, conn);//存储过程名称"Add_inventory" cmd.CommandType = CommandType.StoredProcedure; PropertyInfo[] propertyInfos = typeof(T).GetProperties(); foreach (PropertyInfo propertyInfo in propertyInfos) { var value = propertyInfo.GetValue(entity, null); cmd.Parameters.AddWithValue("@" + propertyInfo.Name, value);//参数 } conn.Open(); cmd.ExecuteNonQuery(); //var count = cmd.ExecuteNonQuery(); //if (count > 0) //{ // Console.WriteLine($"存储过程 {ProcedureName} 调用成功。"); //} } } } }