añadidos posts
This commit is contained in:
93
content/posts/Diseño de Software incident/index.md
Normal file
93
content/posts/Diseño de Software incident/index.md
Normal 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
|
||||
Reference in New Issue
Block a user