Medir la velocidad de un Stream

by Valeriano Tortola 28. septiembre 2007 20:46

Cosilla curiosa que nunca había hecho antes, medir la velocidad de lectura de un Stream, por ejemplo para saber a que velocidad en Bytes/s descargamos de un NetworkStream, ó de un FtpDataStream, ó para saber como de rápido lee nuestro disco duro ... ya sea con fines meramente estadísticos ó para encontrar el tamaño de buffer adecuado ... Es un procedmiento muy sencillo, se trata de dividir los bytes descargados entre los milisegundos transcurridos (cuantos bytes por milisegundo) y multiplicarlo por 1000 (un segundo). Para ello nos apoyamos en la clase para realizar mediciones de tiempo con precisión, StopWatch.

Mas...

Tags: , ,

.NET 2.0 | C# 2.0

DbTransaction, transaciones en un Db Factory

by Valeriano Tortola 16. septiembre 2007 21:08

Siguiendo con el tema del DbFactory con las clases de System.Data.Common, que permiten trabajar con cualquier base de datos de la que tengamos un proveedor en .NET, explicaré la clase DbTransaction, el cual permite realizar transacciones en la base de datos (explicación más completa en la versión en inglés).

Una transacción es una operación formada por un grupo de operaciones relacionadas, cada una podría requerir varias operaciones de lectura y/ó escritura en la base de datos, y solo tiene validez si se ejecutan todas. En caso de producirse un error en el transcurso de la transacción, ha de ser posible “deshacer” todas las operaciones anteriores (rollback), en caso contrario se da por finalizada la transacción aplicando los cambios (commit).

Mas...

Tags:

.NET 2.0 | C# 2.0 | ADO.NET

DbParameter.

by Valeriano Tortola 16. septiembre 2007 20:56

Para evitar problemas de seguridad en ADO.NET 2.0 es recomendable componer las sentencias SQL a base de parámetros en lugar de construir las cadenas manualmente en base a las propiedades .Text de los controles u otros orígenes. De esta forma evitamos fallos de seguridad potenciales (ie: SQL Injection) y otros problemas menores. Siguiendo con nuestra DB Factory donde mostré como utilizar la Fábrica de objetos de ADO.NET 2.0 para construir objetos que pueden manejar cualquier base de datos, ahora le toca el turno a la clase DbParameter para añadir parámetros a las sentencias SQL de nuestra DB Factory.

Mas...

Tags:

.NET 2.0 | C# 2.0 | ADO.NET

Localizar carpetas especiales de Windows

by Valeriano Tortola 16. septiembre 2007 04:46

Esto lo ví una vez y a raiz de una pregunta en el foro lo busqué de nuevo. Se trata de como localizar las rutas a las carpetas especiales de Windows desde .NET, aunque existe una variable de entorno %homepath% apuntando a nuestra carpeta personal en el sistema, no hay ninguna para llegar a carpetas como 'Escritorio', 'Mis Imágenes', 'Mi Música', ... etc ... y dependiendo del idioma en el que este el sistema operativo, pueden llamarse 'Desktop', 'My Pictures', 'My Music', ...etc...

Mas...

Tags:

.NET 2.0 | C# 2.0

Enviar un Stream por eMail

by Valeriano Tortola 7. septiembre 2007 23:02

Siguiendo con lo de enviar un archivo por eMail, puede ser que lo que queramos enviar no este en el sistema de archivos, si no que este en la memoria de nuestro programa. Un ejemplo de esto es que exportemos el contenido de un DataGridView a formato Excel ó hayamos dibujado un gráfico con GDI+ ... ó cualquier cosa que se os ocurra ... y lo queramos enviar por eMail como archivo adjunto, al igual que enviar un Stream por FTP, enviar un Stream como archivo adjunto también pude ser muy útil.

Ahí va un sencillo ejemplo:

Mas...

Tags: , ,

.NET 2.0 | C# 2.0

Descargando un fichero por FTP

by Valeriano Tortola 6. septiembre 2007 15:16

Siguiendo con el tema de Enviar un archivo por FTP y Enviar un Stream por FTP , vamos ahora con la descarga. También nos puede ser útil poder descargar archivos por FTP, para cosas como descargar copias de seguridad de un servidor ó realizar la copia en si misma, descargar archivos de servidores de forma sencilla y con autenticación, etc .. etc...

Ahí va un sencillo ejemplo:

Mas...

Tags: , , ,

.NET 2.0 | C# 2.0

DB Factory con ADO.NET 2.0

by Valeriano Tortola 5. septiembre 2007 18:08

Muchas veces, nos encontramos ante la necesidad de escribir aplicaciones que puedan trabajar con cualquier tipo de base de datos, evitando en la máxima medida tener que modificar el código de la aplicación para ello. Para solventar este problema, siempre se ha recurrido al “modelo de n capas” donde una de ellas, era el proveedor de acceso a datos y se encargaba de abstraer esta tarea, normalmente encapsulada en una librería .dll que se cambiaba a voluntad sin que ello supusiese ningún problema para la aplicación. Esta librería, suele contener lo que se denomina un DBFactory, una clase abstracta o conjunto de funciones encargadas de adaptarse a la base de datos que se le indique y obtener datos de forma transparente para su consumidor, esta semana he descubierto como hacerlo con ADO.NET 2.0 sin tener que codificar a penas nada con las clases que habitan en System.Data.Common.

El ejemplo lo voy a hacer con SQL Server 2005 Express Edition y la base de datos de ejemplo "Northwind" que trae por defecto :).

Mas...

Tags:

.NET 2.0 | C# 2.0 | ADO.NET

Depurando con .NET

by Valeriano Tortola 4. septiembre 2007 17:57

No siempre llenar el código de breakpoints ó seguir step-by-step ejecuciones largas es lo más recomendable para depurar el funcionamiento de nuestra aplicación en desarrollo , podemos apoyarnos en las clases Debugger, Debug y Trace de System.Diagnostics para realizar diagnósticos más rápidos y sobre todo que sean condicionados, de forma que solo pare ó solo registre una línea de log de actividad cuando nos interesa que lo haga.

Así que pasando un poco de las inestimables ayudas de Visual Studio 2005 para estos menesteres esta vez, voy a dar un resumen rápido de la utilidad de estas clases de ayuda al depurado. Las clases Debug y Trace son prácticamente iguales, la diferencia estriba en que la primera solo funciona en modo DEBUG y la segunda también en RELEASE. Por lo tanto lo que escriba de uno es aplicable al otro, pero tened en cuenta esta diferencia. Por ejemplo, el DefaultTraceListener (que se explica más adelante) está entre los listeners de Trace, no de Debug, aunque sea el que va conectado a la ventana ouput de Visual Studio 2005 ;)

Mas...

Tags:

.NET 2.0 | C# 2.0

Obtener la salida de un comando de consola

by Valeriano Tortola 4. septiembre 2007 12:50

En ocasiones, necesitamos que nuestra aplicación ejecute un comando de consola (cmd.exe) para obtener datos de alguna aplicación de consola ó simplemente para poner en marcha un servicio. La manera sencilla y tosca res ejecutar el comando redirigiendo la salida a un archivo, después abrir el archivo y coger el resultado para procesarlo.

Este ejemplo presenta la forma elegante, creamos un proceso y redirigimos los Streams de entrada y salida hacia nuestro programa para poder enviar y recibir datos de forma asíncrona.

Mas...

Tags: , , ,

.NET 2.0 | C# 2.0

Enviar un Stream por FTP

by Valeriano Tortola 2. septiembre 2007 18:50

Siguiendo con el artículo sobre como enviar un archivo por FTP, no siempre lo que queremos enviar esta ya materializado en el sistema de archivos, puede ser también un archivo que estemos generando en memoria, como un reporte, un archivo .pdf, .xml .. etc.. etc.. y tener que guardarlo en disco para luego poderlo enviar por FTP es molesto, asi que aquí va un ejemplo de como enviar el contenido de un Stream (ó derivado) a un FTP:

Mas...

Tags: , , ,

.NET 2.0 | C# 2.0