Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Data;
- using ejemplo_crud_MVC_sqlServer.Models;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Data.SqlClient;
- namespace ejemplo_crud_MVC_sqlServer.Controllers
- {
- public class CategoriasController : Controller
- {
- private readonly string _connectionString;
- public CategoriasController(IConfiguration configuration)
- {
- _connectionString = configuration.GetConnectionString("DefaultConnection");
- }
- public IActionResult Index(int pagina = 1, int tamañoPagina = 10)
- {
- var categorias = ObtenerCategorias(pagina, tamañoPagina);
- var totalCategorias = ObtenerTotalCategorias();
- ViewBag.TotalPaginas = (int)Math.Ceiling((double)totalCategorias / tamañoPagina);
- ViewBag.PaginaActual = pagina;
- return View(categorias);
- }
- private int ObtenerTotalCategorias()
- {
- int totalCategorias = 0;
- using (var connection = new SqlConnection(_connectionString))
- {
- connection.Open();
- var command = new SqlCommand("sp_CRUD_General", connection)
- {
- CommandType = CommandType.StoredProcedure
- };
- command.Parameters.AddWithValue("@accion", "count");
- command.Parameters.AddWithValue("@tabla", "categoria");
- command.Parameters.AddWithValue("@id", DBNull.Value);
- command.Parameters.AddWithValue("@pagina", DBNull.Value);
- command.Parameters.AddWithValue("@tamañoPagina", DBNull.Value);
- using (var reader = command.ExecuteReader())
- {
- if (reader.Read())
- {
- totalCategorias = (int)reader["TotalCategorias"];
- }
- }
- }
- return totalCategorias;
- }
- private List<Categoria> ObtenerCategorias(int pagina, int tamañoPagina)
- {
- var categorias = new List<Categoria>();
- using (var connection = new SqlConnection(_connectionString))
- {
- connection.Open();
- var command = new SqlCommand("sp_CRUD_General", connection)
- {
- CommandType = CommandType.StoredProcedure
- };
- command.Parameters.AddWithValue("@accion", "select");
- command.Parameters.AddWithValue("@tabla", "categoria");
- command.Parameters.AddWithValue("@id", DBNull.Value);
- command.Parameters.AddWithValue("@pagina", pagina);
- command.Parameters.AddWithValue("@tamañoPagina", tamañoPagina);
- using (var reader = command.ExecuteReader())
- {
- while (reader.Read())
- {
- categorias.Add(new Categoria
- {
- idCategoria = (int)reader["IdCategoria"],
- nombreCategoria = reader["NombreCategoria"].ToString()
- });
- }
- }
- }
- return categorias;
- }
- public IActionResult CrearOEditar(int? id)
- {
- if (!id.HasValue)
- {
- return View(new Categoria());
- }
- var categoria = ObtenerCategoriaPorId(id.Value);
- if (categoria == null)
- {
- return NotFound();
- }
- return View(categoria);
- }
- private Categoria ObtenerCategoriaPorId(int idCategoria)
- {
- Categoria categoria = null;
- using (var connection = new SqlConnection(_connectionString))
- {
- connection.Open();
- var command = new SqlCommand("sp_CRUD_General", connection)
- {
- CommandType = CommandType.StoredProcedure
- };
- command.Parameters.AddWithValue("@accion", "select");
- command.Parameters.AddWithValue("@tabla", "categoria");
- command.Parameters.AddWithValue("@id", idCategoria);
- using (var reader = command.ExecuteReader())
- {
- if (reader.Read())
- {
- categoria = new Categoria
- {
- idCategoria = (int)reader["IdCategoria"],
- nombreCategoria = reader["NombreCategoria"].ToString()
- };
- }
- }
- }
- return categoria;
- }
- [HttpPost]
- public IActionResult CrearOEditar(Categoria categoria)
- {
- int filasAfectadas = 0;
- try
- {
- using (var connection = new SqlConnection(_connectionString))
- {
- connection.Open();
- using (var command = new SqlCommand("sp_CRUD_General", connection))
- {
- command.CommandType = CommandType.StoredProcedure;
- var accion = categoria.idCategoria == 0 ? "insert" : "update";
- command.Parameters.AddWithValue("@accion", accion);
- command.Parameters.AddWithValue("@tabla", "categoria");
- command.Parameters.AddWithValue("@id", categoria.idCategoria == 0 ? (object)DBNull.Value : categoria.idCategoria);
- command.Parameters.AddWithValue("@nombre", categoria.nombreCategoria);
- command.Parameters.AddWithValue("@descripcion", DBNull.Value);
- command.Parameters.AddWithValue("@idCategoria", DBNull.Value);
- command.Parameters.AddWithValue("@pagina", DBNull.Value);
- command.Parameters.AddWithValue("@tamañoPagina", DBNull.Value);
- var returnParam = new SqlParameter
- {
- Direction = ParameterDirection.ReturnValue,
- SqlDbType = SqlDbType.Int
- };
- command.Parameters.Add(returnParam);
- command.ExecuteNonQuery();
- filasAfectadas = (int)returnParam.Value;
- }
- }
- if (filasAfectadas > 0)
- {
- TempData["SuccessMessage"] = "Categoría guardada exitosamente.";
- }
- else if (filasAfectadas == 0)
- {
- TempData["ErrorMessage"] = "No se realizó ningún cambio en la categoría.";
- }
- else
- {
- TempData["ErrorMessage"] = "Ocurrió un error al guardar la categoría.";
- }
- }
- catch (Exception ex)
- {
- TempData["ErrorMessage"] = "Ocurrió un error inesperado: " + ex.Message;
- }
- return RedirectToAction("Index");
- }
- public IActionResult Eliminar(int id)
- {
- try
- {
- using (var connection = new SqlConnection(_connectionString))
- {
- connection.Open();
- using (var command = new SqlCommand("sp_CRUD_General", connection))
- {
- command.CommandType = CommandType.StoredProcedure;
- command.Parameters.AddWithValue("@accion", "delete");
- command.Parameters.AddWithValue("@tabla", "categoria");
- command.Parameters.AddWithValue("@id", id);
- var returnParam = new SqlParameter
- {
- Direction = ParameterDirection.ReturnValue,
- SqlDbType = SqlDbType.Int
- };
- command.Parameters.Add(returnParam);
- command.ExecuteNonQuery();
- int filasAfectadas = (int)returnParam.Value;
- if (filasAfectadas > 0)
- {
- TempData["SuccessMessage"] = "Categoría eliminada exitosamente.";
- }
- else if (filasAfectadas == 0)
- {
- TempData["ErrorMessage"] = "No se encontró la categoría a eliminar.";
- }
- else
- {
- TempData["ErrorMessage"] = "Ocurrió un error al eliminar la categoría.";
- }
- }
- }
- }
- catch (SqlException ex) when (ex.Number == 547)
- {
- TempData["ErrorMessage"] = "No se puede eliminar la categoría porque está siendo utilizada por uno o más productos.";
- }
- catch (Exception ex)
- {
- TempData["ErrorMessage"] = "Ocurrió un error inesperado: " + ex.Message;
- }
- return RedirectToAction("Index");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement