Hoy vamos a ver una forma moderna y sencilla para
crear los aplicaciones Web - utilizando la framework Angulars JS. Por fin JavaScript se puede comunicar con una
base de datos, que antes no era posible. Obviamente no comunica solo, sino a
través de una página web con contenido dinámico escrito en cualquier lenguaje
(Java, .NET, PHP).
Hace 15 años, cuando las paginas se cargaban
lentamente y eso era normal, las paginas dinámicas se comunicaban directamente con
una BD y el usuario tenía que utilizar toda su paciencia para esperar la respuesta.
Hoy la página se recarga por partes a la manera que el usuario ni se da cuenta.
Y en una de estas partes puede haber el código que recupera información desde
la BD, que puede ser, por ejemplo, una lista de algo, o un formulario, o otra
cosa.
Sin embargo, técnicamente un código Javascript
sigue siendo incapaz de comunicarse con una BD o hacer otras operaciones que se
llaman “server-side”. En este ejemplo nos ayuda una página dinámica ASP.NET escrita en C# y será
esta página que se va comunicar con la BD. La misma cosa puede ser hecha en JSP o PHP. El código Javascript (en la forma de
Angular JS) va llamar a esta página que se ocupa de recuperar la información (o
actualizar la información) desde la BD.
La cadena se puede presentar asi:
Pagina Web -> Angular JS -> Code
ASP/JSP/PHP -> DB
Empezamos por la creación de una tabla SQL:
El código HTML de la página:
Cuando el
usuario da al botón "Guardar", Angular JS llama nuestra página ASP
con el parámetro “Save”:
$scope.Save = function () {
var httpreq = {
method: 'POST',
url: 'Default.aspx/Save',
headers: {
'Content-Type': 'application/json; charset=utf-8',
'dataType': 'json'
},
data: { StudentName: $scope.studetnName }
}
$http(httpreq).success(function (response) {
$scope.fillList();
alert("Saved successfully.");
})
};
Aquella linea del código llama la función "Save()" en la pagina ASP:
public static void Save(string StudentName)
{
using (SqlConnection con = new SqlConnection(@"data source=localhost\sqlexpress;user id=sa; password=123; database=Sample;"))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.CommandText = "insert into tblStudents (StudentName) values (@StudentName);";
cmd.Parameters.AddWithValue("@StudentName", StudentName);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
Al final el codigo JS hace "fillList()" que mostra nuestra tabla actualizada:
$scope.fillList = function () {
$scope.studetnName = "";
var httpreq = {
method: 'POST',
url: 'Default.aspx/GetList',
headers: {
'Content-Type': 'application/json; charset=utf-8',
'dataType': 'json'
},
data: {}
}
$http(httpreq).success(function (response) {
$scope.StudentList = response.d;
})
};
Detrás del codigo, nuestra pagina ASP recupera los datos desde la BD:
public static List<
Names
> GetList()
{
List<
Names
> names = new List<
Names
>();
DataSet ds = new DataSet();
using (SqlConnection con = new SqlConnection(@"data source=localhost\sqlexpress;user id=sa; password=123; database=Sample;"))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.CommandText = "select StudentID,StudentName from tblStudents where IsActive=1;";
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(ds);
}
}
}
if (ds != null && ds.Tables.Count > 0)
{
foreach (DataRow dr in ds.Tables[0].Rows)
names.Add(new Names(int.Parse(dr["StudentID"].ToString()), dr["StudentName"].ToString()));
}
return names;
}
Como dicho antes, la misma tarea puede ser conseguida con el código Java o PHP, si no quiereis utilizar C#.NET. En caso de Java, p.e. podíamos utilizar o JDBC, o una capa de persistencia (como Hibernate), si quieres hacer lo de la forma más elegante.
También podemos ir más allá y crear un servicio web REST en vez de crear una pagina JSP o ASP.NET. Y nuestra pagina puede ser un cliente que con Angular JS va llamar a este servicio REST. Asi nuestro cliente Front-End y la lógica detrás serán claramente separados.
Vamos dejar estas opciónes para el futuro.
No hay comentarios:
Publicar un comentario