using DotNetNuke.Data; using ACLib.P2.AppContext; using System.Data; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Core.MSSQL.SqlHelper; using System.Collections.Generic; using System.Data.Common; namespace ACLib.P2.ACPI { public class StudentManagerP1 : IDataContext { private readonly DatabaseContext _context; public StudentManagerP1(DatabaseContext databaseContext) { _context = databaseContext; } private T MapDataToObjectOfType(IDataReader reader) { // Implement your mapping logic here based on the reader's columns // For simplicity, you can use a data mapper library like AutoMapper if needed // Example: Map columns to properties of T var result = Activator.CreateInstance(); // Assuming properties of T correspond to columns in the reader foreach (var property in typeof(T).GetProperties()) { if (!reader.IsDBNull(reader.GetOrdinal(property.Name))) { property.SetValue(result, reader[property.Name]); } } return result; } public void BeginTransaction() { throw new NotImplementedException(); } public void Commit() { throw new NotImplementedException(); } public DatabaseContext CreateDbContext() { return _context; } public void Dispose() { _context.Dispose(); } public void Execute(CommandType type, string sql, params object[] args) { throw new NotImplementedException(); } public IEnumerable ExecuteQuery(CommandType commandType, string commandText, params object[] parameters) { using (var connection = _context.Database.GetDbConnection()) { connection.Open(); // Create a command using (var command = connection.CreateCommand()) { command.CommandText = commandText; command.CommandType = commandType; if (parameters != null) { foreach (DbParameter parameter in parameters) { /* DbParameter param = command.CreateParameter(); param.ParameterName = parameter.ParameterName; param.Value = parameter.Value; */ command.Parameters.Add(parameter); } } // Execute the query using (var reader = command.ExecuteReader()) { while (reader.Read()) { // Map the data to objects of type T yield return MapDataToObjectOfType(reader); } } } } } public T ExecuteScalar(CommandType type, string sql, params object[] args) { throw new NotImplementedException(); } public T ExecuteSingleOrDefault(CommandType type, string sql, params object[] args) { throw new NotImplementedException(); } public IRepository GetRepository() where T : class { throw new NotImplementedException(); } public void RollbackTransaction() { throw new NotImplementedException(); } public IDataReader ExecuteReader(CommandType commandType, string commandText, params SqlParameter[] parameters) { if (string.IsNullOrEmpty(commandText)) { throw new ArgumentException("Command text cannot be null or empty.", nameof(commandText)); } var database = _context.Database; var dbCommand = database.GetDbConnection().CreateCommand(); dbCommand.CommandType = commandType; dbCommand.CommandText = commandText; dbCommand.Parameters.AddRange(parameters); // Open the database connection if (database.GetDbConnection().State != ConnectionState.Open) { database.GetDbConnection().Open(); } // Execute the command and return the DataReader return dbCommand.ExecuteReader(CommandBehavior.CloseConnection); } } }