En este artículo conoceremos cómo podemos introducir y consumir información en nuestras bases de datos.
1. Introducir información
Partiremos de la tabla Post que creamos en el artículo anterior y veremos cómo introducir datos en ella mediante código, que es el procedimiento que habitualmente seguiremos. Para ello, vamos a crear una página nueva, "Postear.cshtml", que servirá para introducir un nuevo post en la base de datos. El código de esta página sería algo parecido a esto:
@{
Layout = "/Compartido/_Maestra.cshtml";
PageData["Titulo"] = "Postear";
if (IsPost)
{
var db = Database.Open("Mi Blog");
var sentenciaInsercion =
"INSERT INTO Post (Titulo, Contenido, Autor, Fecha) VALUES (@0, @1, @2, @3)";
db.Execute(sentenciaInsercion,
Request["titulo"],
Request["contenido"],
Request["autor"],
DateTime.Now.ToString());
var id = db.GetLastInsertId();
Response.Redirect(@Href("/MostrarPost?PostId=" + id));
}
}
<form method="post" action="">
<table>
<tr>
<td><label>Titulo</label></td>
<td>
<input type="text" name="titulo" size="52"
value="@Request["titulo"]"/>
</td>
</tr>
<tr>
<td><label>Contenido</label></td>
<td>
<textarea name="contenido" rows="15" cols="40"
value="@Request["contenido"]"></textarea>
</td>
</tr>
<tr>
<td><label>Autor</label></td>
<td>
<input type="text" name="autor" size="52"
value="@Request["autor"]"/>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Publicar" />
</td>
</tr>
</table>
</form>
Empecemos analizando el HTML. Se compone de una tabla con 3 campos para introducir título, contenido y autor, más un botón para procesar la información. Cuando pulsemos el botón, el posteo se realizará sobre la propia página, y ahí entrará en juego el código que hemos definido en la parte superior.
Analicemos cada uno de los pasos que están descritos y qué métodos están involucrados:
- En primer lugar, definimos que sólo se ejecutará este código si la petición a la página se ha realizado mediante HTTP-POST, al estar comprobándose a variable "IsPost", que nos indica si hemos llegado a la página mediante una petición de este tipo.
- En caso de que estemos ejecutando una petición por POST, abrimos una conexión con la base de datos mediante el método Open de la clase Database, pasándole como parámetro el nombre de dicha base de datos. Un detalle, la clase DateTime contiene una propiedad "Now" que nos devuelve la fecha de ese instante, ideal para poder indicar en qué momento hemos insertado el post.
- Una vez abierta la conexión, escribimos la sentencia SQL que queremos ejecutar y se la pasamos al método Execute, junto con los parámetros que hemos definido en dicha sentencia. Estos valores los obtenemos de Request, que es donde los hemos situado con el HTML que acompaña a la página (campos "value" de las etiquetas input y textarea)
- Recuperamos el ID que la base de datos nos ha generado para esta nueva fila en la tabla Post. Recordemos que hemos definido la columna PostId como identidad en nuestra tabla, lo que significa que SQL Server CE se encargará de generar un valor para ella con cada nueva inserción.
- Por último, realizamos una redirección a una página pasándole como parámetro este id. Utilizamos el método Href para calcular la URL de una forma independiente del navegador que esté renderizando la página, y recurrimos a Response.Redirect para hacer efectiva la redirección.
2. Consultar información
Necesitamos poder leer información en las tablas de nuestra base de datos, así como mostrarla a través de un fragmento de código HTML. A continuación un ejemplo de ambas necesidades combinadas para generar una página con información dinámica.
@{
var db = Database.Open("Mi Blog");
var consulta =
"SELECT Titulo, Contenido, Autor, Fecha FROM Post WHERE PostId = @0";
var postInfo = db.QuerySingle(consulta, Request["PostId"]);
}
<h1>@postInfo.Titulo</h1>
<h3> publicado el @postInfo.Fecha por @postInfo.Autor</h3>
<div style="border: .2em dotted #900; width:350">
@postInfo.Contenido
</div>
El HTML de nuevo es lo más sencillo posible, puesto que no es objeto de estos artículos poner el acento sobre cómo realizar una página web vistosa. Como se ve, mostramos la información que contiene un objeto llamado postInfo; en concreto, los campos Titulo, Fecha, Autor y Contenido. Pero, ¿cómo hemos obtenido este objeto postInfo? Echemos un ojo al código en la parte superior.
En primer lugar, abrimos una conexión a la base de datos y creamos una sentencia SQL como ya hemos aprendido en la sección anterior. La diferencia es que ahora no vamos a ejecutar sino consultar nuestra base de datos. Existen tres métodos distintos para realizar esta operación:
- Query: ejecuta la sentencia y devuelve una colección de resultados. Podremos iterar por todos ellos utilizando el operador "foreach", que nos devolverá una fila cada vez hasta recorrer entera la colección.
- QueryValue: nos devuelve un valor único. Es ideal, por ejemplo, si nuestra consulta tiene que devolvernos el número de filas que cumplan una condición, o el valor que suman todas ellas para una columna concreta.
- QuerySingle: es el método que estamos ejecutando y sirve para devolver un único registro. En nuestro caso, al estar buscando por el ID, sabemos que sólo habrá una fila que cumpla este criterio (o ninguna, algo a tener en cuenta puesto que en tal caso nos devolverá un valor nulo).
El resultado de nuestra página MostrarPost.cshtml podemos verlo en la siguiente imagen:
3. Conclusiones
En estos dos artículos hemos visto todo el tratamiento de datos que podemos hacer en WebMatrix y que nos cubre más del 80% de los escenarios. Si en anterior aprendimos a definir nuestro esquema de base de datos, en éste hemos podido comprobar qué fácil es insertar y consultar información.Javier Holguera
Desarrollador senior con tecnología .NET en Payvision.