Como segundo paso para alcanzar objetivos tan ambiciosos como retirar una WebAPI y de esta manera minimizar costos y aumentar la efectividad de nuestro entorno de nube entonces vamos con la segunda opción, las operaciones de inserción de datos. Definitivamente, con la estructura de esta tabla tendrás toda la comodidad de trabajar con cualquiera de las dos operaciones restantes como UPDATE o DELETE.
Cuando tengas tu función creada comienza por agregar la cadena de conexión a SQL de la misma manera que en la operación de SELECT.
Después de ello, agrega un archivo de tipo project.json.
{ "frameworks": { "net46":{ "dependencies": { "System.Data.SqlClient":"4.1.0", "Microsoft.WindowsAzure.ConfigurationManager":"3.2.1" } } } } |
Este archivo te permitirá agregar los dos paquetes Nuget que vas a necesitar. Después de ello, debes crear una nueva clase, de preferencia con el mismo nombre que tu tabla, ya sabes, un poco de control, agrega ahí todos los campos que corresponden a cada columna.
Con tu modelo y tus paquetes NuGet creados entonces puedes comenzar a trabajar en tu método por ejecutar, aquí está todo el código.
#r "Newtonsoft.Json" #load "Contactos.csx" using System.Net; using System.Data.SqlClient; using System.Configuration; using Newtonsoft.Json; public static async Task Run(HttpRequestMessage req, TraceWriter log) { log.Info("C# HTTP trigger function processed a request."); dynamic body =await req.Content.ReadAsStringAsync(); var e = JsonConvert.DeserializeObject(body asstring); bool successful; try { var cnnString = ConfigurationManager.ConnectionStrings["contactosstring"].ConnectionString; using(var connection =new SqlConnection(cnnString)) { connection.Open(); DateTime currentTime = DateTime.Now; var recordInsert ="INSERT INTO [dbo].[Contactos] ([nombre],[apellido],[correo],[telefono],[edad],[mesNacimiento],[diaNacimiento],[anioNacimiento])"+ "VALUES ('"+ e.nombre +"','"+ e.apellido +"','"+ e.correo +"','"+ e.telefono +"',"+ e.edad +","+ e.mesNacimiento +","+ e.diaNacimiento +","+ e.anioNacimiento +")"; log.Info(recordInsert); using(SqlCommand cmd =new SqlCommand(recordInsert, connection)) { var rows = cmd.ExecuteNonQuery(); } connection.Close(); successful =true; } } catch { successful=false; } return successful ? req.CreateResponse(HttpStatusCode.OK, "It's all set") : req.CreateResponse(HttpStatusCode.BadRequest, "Something went wrong"); } |
Podrás notar que no es necesario utilizar EntityFramework y puedes hacerlo apoyándote en sentencias de SQL lo que te da mucha flexibilidad para hacer ciertas tareas. Solo basta que hagas una prueba con tu pestaña de Test.
Puedes ir a probar en la base de datos y solo confirmar que este registro ha sido insertado. En este enlace se me ocurrió crear una aplicación de Android que podría servir de guía para que también conozcas cómo enviar la información desde un cliente a esta función.
El cliente de Android para insertar información
El cliente cuenta con un conjunto de campos de texto que puedes utilizar para ingresar toda la información. La interfaz es la siguiente.
En el caso de del código es muy fácil crear el JSON que requieres para insertar en la función.
private async void InsertIntoFunction(string Nombre, string Apellido, string Correo, string Telefono, int Edad, int Dia, int Mes, int Anio) { HttpClient request = new HttpClient(); var requestedLink = new Uri("https://aminespinoza.azurewebsites.net/api/InsertContacto?code=B1sG8aIXQ1BcPDxzaaQ=="); HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, requestedLink); var newContactRecord = new { nombre = Nombre, apellido = Apellido, correo = Correo, telefono = Telefono, edad = Edad, diaNacimiento = Dia, mesNacimiento = Mes, anioNacimiento = Anio }; var messageString = JsonConvert.SerializeObject(newContactRecord); requestMessage.Content = new StringContent(messageString, Encoding.UTF8, "application/json"); HttpResponseMessage response = await request.SendAsync(requestMessage); var responseString = await response.Content.ReadAsStringAsync(); SendToastNotification(Nombre); } private void SendToastNotification(string description) { string finalMessage = string.Format("El nuevo registro de {0}, está hecho", description); Toast.MakeText(this.ApplicationContext, finalMessage, ToastLength.Short).Show(); } |
Puedes ver la solución completa y tener aceso al código tanto del client como de la función en GitHub aquí.