127.0.0.1: Hogar dulce hogar
Mostrando entradas con la etiqueta datareader. Mostrar todas las entradas
Mostrando entradas con la etiqueta datareader. Mostrar todas las entradas

domingo, 2 de mayo de 2010

[ADO.NET] Lectura de una tabla

ADO.NET proporciona una serie de métodos diversos para acceder a la base de datos y realizar transacciones. En este artículo se mostrará cómo se pueden leer datos de una tabla. Previamente se parte de la base de que la parte de realizar una conexión ya es conocida y está implementada.

Uno de los métodos para acceder a la tabla es empleando proveedores de datos. Estos proveedores permiten conectarse a diferentes motores de base de datos (OJBC, Sql Server, MySQL, Oracle, etc) y ejecutar comandos SQL de la misma forma que si estuviésemos en el cliente del motor.

Para la lectura de una tabla, se proporciona al clase DataReader que únicamente permite leer los datos. A través de esa clase ejecutaremos un comando que hemos insertado previamente, desde el cuál indicaremos la orden de SQL correspondiente (si es de lectura, sólo puede ser una SELECT en principio). Por lo tanto, una vez abierta la conexión nos encontramos con el siguiente código:

string query = "SELECT nombre FROM EQUIPO";
SqlCommand command = new SqlCommand(query, Conexion.Instancia);

Al comando se le introduce la sentencia que se desea ejecutar junto con la conexión que previamente hemos abierto. En el código de arriba, suponemos que tenemos una clase singleton que gestiona toda la conexión y que el SqlConnection lo obtenemos a través de Conexion.Instancia. A continuación el siguiente paso es ejecutar el comando y obtener las filas que se han leído, para lo cual usaremos el DataReader:

SqlDataReader sqlDataReader = command.ExecuteReader();

El comando al ejecutarse devuelve un puntero a los datos leídos, como si fuera un simple fichero que se desea abrir. Por ello el dataReader incorpora unos métodos similares. Para obtener los datos, usaremos el siguiente método:

while (sqlDataReader.Read())
{
//sqlDataReader[0];
//sqlDataReader[1];
}

Con este bucle seguirá leyendo hasta que finalice la consulta. Para obtener los datos accedemos a las sucesivas posiciones de sqlDataReader, donde cada posición representa una columna leída. Es de señalar que devuelve tipo object, por lo que hay que hacer una conversión explícita al tipo deseado.

Por último no te olvides de cerrar la conexión :)

domingo, 25 de abril de 2010

[ADO.NET] Conexión con una base de datos

El pasado jueves 22 de Abril impartí el taller de ADO.NET en la Universidad de Alicante. Como últimamente dispongo de poco tiempo para sobrevivir -y menos para escribir artículos- comenzaré con esta temática, inaugurando la serie/tag de ADO en este blog. Uno de los puntos críticos de cualquier aplicación es el tratamiento de su persistencia de datos. En otra ocasión trataré el tema de la arquitectura, que es bastante interesante. Ahora simplemente lo voy a dedicar a ver cómo se puede acceder a los datos que previamente se han almacenado en una base de datos. ADO.NET proporciona una serie de clases llamadas proveedores que permiten realizar el tratamiento de datos con una BD. En este caso vamos a suponer que el motor de la base de datos es SQL Server 2005, aunque obviamente es perfectamente posible conectarse a otras bases de datos a través de sus respectivos proveedores de datos. Para conectarnos a nuestro motor de base de datos, debemos usar un string que actuará de cadena de conexión y una clase llamada SQLConnection que será la encargada gestionar la totalidad de la conexión. Por ejemplo, un string como cadena de conexión podría ser el siguiente:
string connectionString = "Data Source=localhost;Initial Catalog=TallerADO; integrated security=true";
En este caso tenemos varias propiedades. En primer lugar indicamos que el servicio del motor de la base de datos está situado en la dirección localhost y que vamos a emplear la base de datos cuyo nombre es TallerADO. Por último indicamos que tiene seguridad integrada, lo cual significa que usaremos la autenticación propia de Windows para acceder a dicho servicio. A continuación debemos instanciar la clase SQLConnection del siguiente modo:
SQLConnection conexion = new SqlConnection(connectionString);
Por último, abrirmos la conexión con:
conexion.Open()
y la cerramos con
conexion.Close()
Sin embargo, el usar un string como cadena de conexión puede resular bastante tedioso para el programador, en especial aquellas ocasiones en que la cadena es bastante larga y/o posee un gran número de atributos. Para ello existe una clase que ayuda a generar esta cadena, una clase llamada SqlConnectionStringBuilder. Esta clase proporciona propiedades de acceso para cada uno de los atributos que puede tener una cadena de conexión desde todos los que vimos anteriormente hasta otros como la caducidad de la conexión, timeout, usuario, contraseña, etc. Veamo cómo se hace:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();

builder.DataSource = "localhost";
builder.InitialCatalog = "TallerADO";
builder.IntegratedSecurity = false;
builder.UserID = "yuju";
builder.Password = "yuju";
conexion = new SqlConnection(builder.ConnectionString);
En este caso hemos añadido dos nuevas propiedades: userID y Password, que serán las credenciales que usaremos para conectarnos al motor de la base de datos. Como queremos usar esas credenciales, marcamos IntegritatedSecurity como false para evitar que al hacer la conexión se emplee la cuenta de Windows con tales fines. Por último, a través de la propiedad ConnectionString el builder nos proporciona la cadena generada. Mejor así, ¿no? Por último, se entiende que todo el código aquí mencionado debe ir dentro de try/catch para emplearse en el gestor de excepciones que tengamos en nuestra aplicación.