añadidos posts

This commit is contained in:
2025-05-23 10:47:44 -03:00
parent 4022064442
commit 70713a2fd1
17 changed files with 543 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
---
layout: post
title: "Diseño de Software Incident"
date: 2023-09-22T15:08:17+08:00
tags: ["old_blog"]
math: false
draft: false
---
# Instanciacion del SqlConnection
```csharp
using (var connection = new SqlConnection(configuration.GetConnectionString("DefaultConnection")))
```
Eso genera un sql connection que va a existir hasta que salga del scope del programa.
# Creacion del SqlCommand
```csharp
using var command = new SqlCommand();
command.CommandText = "sp_RecuperaProductos";
command.CommandType = System.Data.CommandType.StoredProcedure;
```
# Apertura de la coneccion
```csharp
command.Connection = connection;
command.Connection.Open();
```
## Utilizacion del ExecuteReader
Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. **MUY** importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).
```csharp
var reader = command.ExecuteReader();
while (reader.Read())//lee a traves de todas las filas que existen en la tabla
{
//por cada fila que creo tengo que asignar manualmente cada columna con cada propiedad
var producto = new Producto();
producto.Codigo = reader["Codigo"].ToString();
producto.Nombre = reader["Nombre"].ToString();
producto.Cantidad = Convert.ToInt32(reader["Cantidad"].ToString());
producto.CantidadMinima = Convert.ToInt32(reader["CantidadMinima"].ToString());
producto.Precio = Convert.ToDecimal(reader["Precio"].ToString());
var codigoCategoria = reader["CodigoCategoria"].ToString();
producto.Categoria = RepositorioCategorias.Instancia.RecuperarCategorias().FirstOrDefault(c => c.Codigo == codigoCategoria);
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
using var commandProveedores = new SqlCommand();
//otra forma de hacerlo es usando Store Procedures
commandProveedores.CommandText = "sp_RecuperarProveedoresProducto";
commandProveedores.CommandType = System.Data.CommandType.StoredProcedure;
commandProveedores.Parameters.Add("@CodigoProducto", System.Data.SqlDbType.NVarChar,25).Value = producto.Codigo;
/////////////////////////
commandProveedores.Connection = connection;
var readerProveedoresProducto = command.ExecuteReader();
while (readerProveedoresProducto.Read())//lee a traves de todas las filas que existen en la tabla
{
var codigoProveedor = readerProveedoresProducto["CodigoProveedor"].ToString();
var proveedor = RepositorioProveedores.Instancia.RecuperarProveedores().FirstOrDefault(x => x.Codigo == codigoProveedor);
producto.AgregarProveedor(proveedor);
//una vez cargado el objeto completo lo agrego a la coleccion
}
productos.Add(producto);
}
```
# Cerrado de la coneccion
NOTA: no ser mamerto y cerrar la coneccion fuera del while-loop.
```csharp
command.Connection.Close();
```
# Sub-Query
```csharp
using var commandProveedores = new SqlCommand();
commandProveedores.CommandType = System.Data.CommandType.StoredProcedure;
commandProveedores.CommandText = "SP_AGREGARPROVEEDORPRODUCTO";
commandProveedores.Connection = connection;
commandProveedores.Transaction = sqlTransaction;
commandProveedores.Parameters.Add("@CodigoProducto", System.Data.SqlDbType.NVarChar,25).Value = producto.Codigo;
commandProveedores.Parameters.Add("@CodigoProveedor", System.Data.SqlDbType.NVarChar, 25);
foreach (var proveedor in producto.Proveedores)
{
commandProveedores.Parameters["CodigoProveedor"].Value = proveedor.Codigo;
commandProveedores.ExecuteNonQuery();
}
```
# Non-Query
Un query es una consulta de tipo UPDATE, INSERT, DELETE, para el ExecuteNonQuery se devuelve la cantidad de ramas afectadas, menos en el uso de un StoredProcedure donde devuelve -1.
# Notas
> " Si compila y anda, aprueba " ~Laureano