Ir al contenido principal

Crear Web API en ASP.NET con ADO.Net usando VS 2019 Método Post- Fase III

Hola que tal, continuamos con la implementación de Web API con ADO.Net, en la fase II revisamos e implementamos el método GET con e fin de mostrar los registros ya ingresados en nuestro articulo de CRUD - Base de Datos con Microsoft SQL Server 2019

Ahora veremos cómo implementar el método POST con el fin de crear un nuevo registro en nuestra base de datos BD_TEST.

Como ya es conocido el método POST se utiliza para solicitar que el servidor de origen acepte la entidad incluida en la solicitud como un nuevo sub proceso del recurso identificado por el Request-URI en la Request-Line. Es decir básicamente, significa que POST Request-URI de solicitud debe ser de una URI de tipo colección.

Lo que veremos en este articulo:

  • Requisitos.
  • Paso 1: Implementar el método InsertUsers en el proyecto Data.Access.
  • Paso 2: Invocar el método InsertUsers en el proyecto WebApi.Data.Business
  • Paso 3: Invocar el método InsertUsers en el proyecto WebApi.Domain.
  • Paso 4: Implementar el método POST en el proyecto WebApi.
  • Paso 5: Testear el método POST desde Postman.
  • Conclusión:

Requisitos:

  1. Microsoft Visual Studio Community 2019
  2. .Net Framework 4.6
  3. ADO.Net (tecnología para la conexión a datos)
  4. Microsoft SQL Server 2019 Express
  5. T-SQL (Lenguaje transaccional para SQL)
  6. Postman

Paso 1: Implementar el método InsertUsers en el proyecto Data.Access:

Recordemos que la fase anterior ya se agregaron las referencias System.ConfigurationSystem.Data y System.Data.Cliente e importamos las 3 referencia desde en la clase UsuarioDAL.cs seguidamente implementamos el método POST con las siguiente consideraciones:

ConnectionStringsSection: Nos proporciona acceso mediante programación a la sección del archivo de configuración de cadenas de conexión.

Se hace uso del SqlCommand y un SqlConnection. Es decir el SqlConnection se abre y se establece como la conexión para el SqlCommand. 

Agregamos los parametros con relación al procedimiento creado en la base de datos, y seguidamente pasamos los datos a nuestro modelo usuario "usuarioModel esta definido como parametro de entrada".

Así mismo, capturamos el dato de salida que nos proporciona nuestro procedimiento almacenado, recordemos que el tipo de dato ID es un tipo dato autogenerado "identity" que esta definido en la base de datos.

Para finalizar ejecutamos el comando ExecuteNonQuery para lograr la inserción de los registros y retornamos el nuevo ID del registro ingresado.

using System;

using System.Collections.Generic;

 

//Importar para acceder al poryecto Models y directio Usuario

using ArquitecturaWebApi.Models.Usuario;

 

using System.Configuration;

using System.Data.SqlClient;

using System.Data;

 

namespace ArquitecturaWebApi.Data.Access.DAL

{

    public class UsuarioDAL

    {

        public static int InsertUsers(UsuarioModel usuarioModel)// Como parámetro enviaremos lo datos de nuestro modelo UsuarioModel

        {//Acceder al archivo de configuración para ller la cadena de conexión

            string cs = ConfigurationManager.ConnectionStrings["CnBD"].ConnectionString;

 

            int result;

            //int intIdUser = 0;

 

            using (SqlConnection con = new SqlConnection(cs))//Inicio la conexión a la base de datos

            {

                con.Open();//Abrimos la conexión a la base de datos

                SqlCommand com = new SqlCommand("SP_INSERTAR_USUARIO", con);//Definimos el comando a ejeuctar

                com.CommandType = CommandType.StoredProcedure;//Comando de tipo procedimiento almacenado

 

                //Agregamos los parametros y pasamos los datos a nuestro modelo

                com.Parameters.Add("@usuario", SqlDbType.VarChar, 50).Value = usuarioModel.usuario;

                com.Parameters.Add("@contrasena", SqlDbType.VarChar, 50).Value = usuarioModel.contrasena;

                com.Parameters.Add("@intentos", SqlDbType.Int, 5).Value = usuarioModel.intentos;

                com.Parameters.Add(new SqlParameter("@nivelSeg", SqlDbType.Decimal)

                {

                    Precision = 18,

                    Scale = 0

                }).Value = usuarioModel.nivelSeg;

 

                //Capturamos el dato de salida - ID de la tablas usuario

                com.Parameters.Add("@oid", SqlDbType.Int, 5).Direction = ParameterDirection.Output;

                com.ExecuteNonQuery();//Ejecuto y comando e insertamos los datos

                result = Convert.ToInt32(com.Parameters["@oid"].Value); //Paso el ID generado en la base de datos

            }

            return result;//Captura el ID generado

        }

    }

}

Paso 2: Invocar el método InsertUsers en el proyecto WebApi.Data.Business:

Ahora invocamos el método InsertUsers(UsuarioModel usuarioModel) que acabamos de implementar en el proyecto Data.Acces.

sing System;

using System.Collections.Generic;

//Importar los poryectos Models y Data.Access, para acceder al directorio Usuario y DAL

using ArquitecturaWebApi.Models.Usuario;

using ArquitecturaWebApi.Data.Access.DAL;

 

namespace ArquitecturaWebApi.Data.Business

{

    public class Usuario

    {       

        public static int InsertUsuario(UsuarioModel usuarioModel)

        {

            try

            {

                return UsuarioDAL.InsertUsers(usuarioModel);

            }

            catch (Exception ex)

            {

                throw new Exception(ex.Message);

            }

        }

    }

}

Paso 3: Invocar el método InsertUsers en el proyecto WebApi.Domain:

Seguidamente invocamos el método InsertUsers(UsuarioModel usuarioModel) que acabamos de implementar en el proyecto Data.Business.

using System;

using System.Collections.Generic;

//Importar para acceder al proyecto Models y directorio Usuario, adempas importar el proyecto Data.Business

using ArquitecturaWebApi.Models.Usuario;

using ArquitecturaWebApi.Data.Business;

 

namespace ArquitecturaWebApi.Domain

{

    public class UsuarioDomain

    {

        public int InsertUsers(UsuarioModel usuarioModel)

        {

            try

            {

                return Usuario.InsertUsers(usuarioModel);

            }

            catch (Exception ex)

            {

                throw new Exception(ex.Message);

            }

        }

    }

}

Paso 4: Implementar el método POST  en el proyecto WebApi:

La implementación de este método POST se logrará en base a la invocación al método InsertUsers. Recordemos que ya se agregaron las referencias e importardas (desde el code behind ) los proyectos de ArquitecturaWebApi.Models y ArquitecturaWebApi.Domain.

        public HttpResponseMessage Post([FromBody]UsuarioModel usuarioModel)

        {

            HttpResponseMessage httpMsg = null;

            try

            {

                UsuarioModel usuario = new UsuarioModel();

                usuario.usuario = usuarioModel.usuario;

                usuario.contrasena = usuarioModel.contrasena;

                usuario.intentos = usuarioModel.intentos;

                usuario.nivelSeg = usuarioModel.nivelSeg;

        

                int result = usuarioDomain.InsertUsers(usuario);//Invocamos el proceso insertar y capturamos el nuevo ID generado

                httpMsg = Request.CreateResponse(HttpStatusCode.OK, usuario);//Confirm Request

 

                if (httpMsg.IsSuccessStatusCode) {//Validamos si el registro fue satisfactorio

                    httpMsg = Get(result);//Listamos los datos del nuevo registro ingresado, como parámetro enviamos el ID nuevo generado

                }

                else

                {//Caso contrario mostramos el siguiente mensaje en pantalla

                    httpMsg = Request.CreateErrorResponse(HttpStatusCode.NotFound, "Ocurrio problemas al ingresar el registro");

                }

                return httpMsg;

            }

            catch (Exception ex)

            {

                httpMsg = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);

            } 

            return httpMsg;

        }

Paso 6: Testear el método GET desde Postman:

Ejecutamos la WebApi desde el Visual Studio, abrimos el SQL Server Management Studio para compara los resultado, seguidamente cargamos Postman y realizamos las siguientes acciones:

  1. Seleccionamos el tipo de método POST.
  2. Ingresamos la url https://localhost:44336/api/Usuario
  3. Clic en Body
  4. Marcamos raw
  5. Seleccionamos JSON (application/json)
  6. Finalmente ingresamos los datos a ingresar en formato JSON.

Después de ingresar los datos a insertar clic en Send (enviar)

Así mismo validamos los datos ingresado haciendo un select a la tabla USUARIO de la base de datos TEST:

Validando el resultado ingresado desde Postmat VS SQL

Conclusión:

Como vimos en este ejemplo practico, la forma de como realizar una inserción de datos no a variado desde la capa de datos, la capa del negocio, la capa entidad y el dominio, lo único que varia es la capa o interfaz cliente que es un proyecto de tipo Web API, que se esta considerando para el ingreso de los datos en formato JSON.

Puedes descargar la solución completa que incluyendo todos los métodos ya implementados y testeados desde Postman.

Espero sus comentarios, éxitos y bendiciones para todos y gratitud a Dios 😊 por todo; nuevamente gracias a todos ustedes por la acogida de este nuevo articulo; déjanos sus comentarios y apreciaciones acerca del articulo y un fuerte abrazo para todos ✌...!!!

Comentarios

Entradas más populares de este blog

Habilitar Usuario HR Oracle

Al realizar la primera instalación del Oracle, el usuario HR por defecto está bloqueado y por ende no podemos loguearnos como dicho usuario, lo que debe hacer son los siguiente pasos, aplicables para Linux o Windows.
1. Conectarse como usuario system o sysdba + contraseña haciendo uso del comando connect.
Usuario: system
Password: xxxx 


2. Hacer uso  del comando alter user hr account unlock desbloqueamos la cuenta.
alter user hr account unlock;

3. Escribimos el comando alter user HR identified by hr; con esto estamos diciendo que la contraseña será hr.

alter user HR identified by hr;

4. Ahora testeamos la conexión con el comando - conn hr/hr@xe. Si deseas después de conectarnos se puede realizar un select a la tabla employees del hr.


Resultado del select realizado
5. Con todos estos pasos realizados ya podemos logearnos desde cualquier IDE como el usuario hr  y la contraseña hr que definimos en el paso 3. 
Para finalizar nos loguearemos con el IDE Oracle SQL Developer.

Espero les sea de utilidad,…

Usuario SYS y SYSTEM - ORACLE

Usuario SYS y SYSTEM
Ambos usuario son creados de forma automática al crear la base de datos ORACLE y se otorga el rol de DBA.

SYS (password por defecto: CHANGE_ON_INSTALL).
SYSTEM (password por defecto: MANAGER).

Lo que se recomienda es cambiar el password de ambos usuarios por el tema de seguridad.

SYS:
Todas las tablas y vistas para el diccionario de datos de la base de datos están almacenados en el esquema SYS. Estas tablas y vistas son críticas para el funcionamiento de la base de datos ORACLE. Para mantener la integridad del diccionario de datos, las tablas del esquema SYS son manipulados solo por la base de datos. Nunca se debería modificar algo o crear tablas en el esquema del usuario SYS.

SYSTEM:
El usuario SYSTEM se utiliza para crear tablas y vistas adicionales que muestran información administrativa, tablas internas y vistas utilizado por varias opciones y herramientas de la base de datos ORACLE. No se recomienda utilizar el esquema SYSTEM para almacenar tablas de interés para usu…

Parámetro de entrada y salida – PL/SQL

Parámetro de entrada y salida – PL/SQL:
Los parámetros de entrada y salida no son los parámetros de inicialización de la base de datos ORACLE. Los parámetros de entra y salida son utilizados mayormente en implementaciones de funciones, procedimientos almacenados o bloques de código bajo el lenguaje del PL/SQL, se considera que ambos parámetros (entra y salida) puedan realizar operaciones en el mismo bloque PL/SQL, es decir, si enviamos un parámetro de entrada hará que cumpla cierta operación y retornara los valores de salida de dicha operación procesada de acuerdo al parámetro de ingresado. Es de acuerdo al caso que nos presenta en la implementación.
Algo importante al definir los parámetros, es saber y considerar cuántos tipos de parámetro existe si solo hablamos de entrada y salida, en realidad mi determinación seria 3 tipos:

Parámetros:

IN – entrada
OUT – salida
IN OUT – entrada salida

Parámetro IN – entrada:
El comportamiento común de estés tipos de parámetros es estar siempre pendiente d…