using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; 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 Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; namespace WIDESEA_Comm.StoredProcedure { public class EXECStoredProcedure { #region 调用添加的存储过程 public static void EXECAdd(T entity, string MethodName) where T : class { string ProcedureName = MethodName + entity.GetType().Name; if (StoredProcedureExists(DBServerProvider.GetConnectionString(), ProcedureName)) { CreateStoredProcedure.Main(entity, MethodName); } using (SqlConnection conn = new SqlConnection(DBServerProvider.GetConnectionString())) { SqlCommand cmd = new SqlCommand(ProcedureName, conn); 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(); } } #endregion #region 调用修改的存储过程 public static void EXECUpdate(T entity, string MethodName) where T : class { string ProcedureName = MethodName + entity.GetType().Name; if (StoredProcedureExists(DBServerProvider.GetConnectionString(), ProcedureName)) { CreateStoredProcedure.Main(entity, MethodName); } using (SqlConnection conn = new SqlConnection(DBServerProvider.GetConnectionString())) { SqlCommand cmd = new SqlCommand(ProcedureName, conn); 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(); } } #endregion #region 查询存储过程是否存在 public static bool StoredProcedureExists(string connectionString, string storedProcedureName) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // 构建查询存储过程的SQL查询 string query = @"SELECT COUNT(*) FROM INFORMATION_SCHEMA.ROUTINES WHERE SPECIFIC_NAME = @procedureName"; using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@procedureName", storedProcedureName); int result = Convert.ToInt32(command.ExecuteScalar()); return result < 1; } } } #endregion #region 调用查询的存储过程 问题点!!!!! public static string GetUsersFromStoredProcedure(T entity, string MethodName) where T : class { #region MyRegion List users = new List(); List roles = new List(); string ProcedureName = MethodName + entity.GetType().Name; if (StoredProcedureExists(DBServerProvider.GetConnectionString(), ProcedureName)) { CreateStoredProcedure.Main(entity, MethodName); } using (SqlConnection conn = new SqlConnection(DBServerProvider.GetConnectionString())) { conn.Open(); SqlCommand cmd = new SqlCommand(ProcedureName, conn); cmd.CommandType = CommandType.StoredProcedure; PropertyInfo[] propertyInfos = typeof(T).GetProperties(); foreach (PropertyInfo propertyInfo in propertyInfos) { var ValueType = propertyInfo.GetColumnType(true).Value; if (ValueType != "uniqueidentifier" && ValueType != "datetime") { var value = propertyInfo.GetValue(entity, null); cmd.Parameters.AddWithValue("@" + propertyInfo.Name, value); } } SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { var a = reader.GetProviderSpecificValue(propertyInfos.Count() - 1); for (int i = 0; i < propertyInfos.Count(); i++) { roles.Add(reader.GetValue(i).ToString()); } return roles.ToString(); // 处理每一条记录 //var column1Value = reader["Column1"]; //var column2Value = reader["Column2"]; //var columnValues = reader.GetValues; //var columnValue = reader.GetValue(0); //var column1Value = reader.GetString(1); //var column2Value = reader.GetString(2); //Console.WriteLine($"Column1: {column1Value}, Column2: {column2Value}"); } try { //conn.Open(); //return cmd.ExecuteReader(); //using (var reader = cmd.ExecuteReader()) //{ // //var readers = reader.ToString(); // while (reader.Read()) // { // var a = reader[$"id"]; // var b = reader["describe"]; // } //} } catch (Exception) { throw; } //var count = cmd.ExecuteNonQuery(); //var dates = cmd.ExecuteReader(); } #endregion //string ProcedureName = MethodName + entity.GetType().Name;//存储过程名称 object data = entity.GetType(); //var datas= JsonConvert.DeserializeObject(reader); using (var connection = new SqlConnection(DBServerProvider.GetConnectionString())) { var command = new SqlCommand(ProcedureName, connection); command.CommandType = CommandType.StoredProcedure; try { connection.Open(); using (var reader = command.ExecuteReader()) { //return reader; //return JsonConvert.DeserializeObject (reader); //return ((IObjectContextAdapter)connection).ObjectContext.Translate < entity.GetType().Name > (reader);//.ToList(); } } catch (Exception ex) { // 处理异常 Console.WriteLine(ex.Message); throw; } } return roles.ToString(); } #endregion } }