JASoft.org

Nuevos "Starter Kits" para Visual studio 2005

Nuevos "Starter Kits" para Visual studio 2005
Microsoft ha publicado nuevos Starter Kits (SK). Se trata de proyectos listos para ser usados que incluyen todo el código fuente y documentación y que sirven para ilustrar técnicas de desarrollo sacando partido a las características de Visual Studio. En este caso los nuevos SK son para Visual Studio 2005, e incluyen aplicaciones para Windows y para la Web. En lugar de ponerlos en la página ASP.net, como era habitual, esta vez están directamente en una página dentro de MSDN. En ésta hay enlaces a cómo crear un SK y cómo instalarlos. Dentro de los SK para Windows Forms sólo hay uno. Se trata de un gestor de información sobre películas que utiliza el servicio Web de Amazon.com para buscar entre los títulos disponibles en esta tienda en-línea. Ilustra técnicas como, por supuesto, llamadas a servicios web, enlazado a datos, almacenamiento local usando SQL Server 2005, etc... En lo que se refiere a aplicaciones para la Web hay más variedad, aunque de momento sólo hay 3 nuevos SK. Éstos s... [Más]

Problemas subiendo archivos al servidor con ASP.NET

Problemas subiendo archivos al servidor con ASP.NET
En el anterior artículo sobre este tema, hace unos días, contaba los rudimentos de cómo se suben archivos a un servidor Web mediante HTTP usando sólo ASP.NET, inclyendo también un código de ejemplo sencillo que lo hacía. Entonces prometí que iba a comentar algunas pegas de esta implementación. Se trata de problemas que normalmente no se comentan en los libros ni en la documentación directamente y que pueden volver loco a más de uno si se los encuentra durante un desarrollo. Los que voy a comentar en el post de hoy tienen que ver con la subida al servidor de archivos grandes. - Limitación de seguridad por defecto Una cosa que no se suele contarse es que la subida de archivos al servidor en ASP.NET está limitada por defecto a 4 MB. Si intentamos usar el código de ejemplo del artículo anterior para subir un archivo de más de 4 MB veremos que se produce un error. Se trata de una limitación de seguridad que trae ASP.NET que impide peticiones al servidor mayores de este tamaño (un envío d... [Más]

Subir archivos al servidor usando ASP.NET

Subir archivos al servidor usando ASP.NET
En los tiempos de ASP 3.0 subir archivos al servidor "a pelo", es decir, sin usar controles de terceros para hacerlo era una tarea harto difícil. Se podía conseguir (nosotros en Krasis, por ejemplo, desarrollamos un componente puro ASP que lo hacía perfectamente), pero era muy complicado y no exento de problemas. En ASP.NET esta tarea se ha convertido en algo mucho más sencillo. En realidad no tanto como algunos se piensan (dentro de un momento diré algo más sobre esto), pero desde luego fácil y rápido de implementar para las ocasiones más normales. Para hacerlo basta con usar el control HtmlInputFile del espacio de nombres System.Web.HtmlControls, así: <INPUT id=SelectorDeArchivos type=file runat="server"> Al colocarle el atributo de ejcución en el servidor luego podemos acceder a sus propiedades y métodos una vez enviado el formulario al servidor. Gracias a ello podemos acceder de forma simple a la información sobre el archivo enviado. Sólo hay una propiedad importante e... [Más]

Cómo ordenar los resultados de una vista en SQL Server

Cómo ordenar los resultados de una vista en SQL Server
Las vistas de SQL Server son muy útiles para utilizar consultas complicadas como si se trataran de simples tablas. Entre sus limitaciones, sin embargo, hay una que (a mi por lo menos) me resulta muy irritante: no se pueden ordenar. Es decir no se puede utilizar la cláusula ORDER BY en la sentencia SQL que define la vista. Este truco permite saltarse las normas a la torera y utilizar ordenaciones de todos modos en las vistas. Y es que según la documentación la cláusula TOP de SQL siempre se puede usar con ORDER BY, incluso en las vistas, ya que si no no notendría mucho sentido ¿verdad?. TOP sirve para obtener los 'x' primeros resultados de una consulta. Por ejemplo, si quiero obtener los últimos 1.000 registros de facturas de una tabla puedo escribir: SELECT TOP 1000 * FROM Facturas ORDER BY NumFact DESC Lo que muchas gente no sabe es que TOP admite una sintaxis alternativa que permite especificar un porcentaje de filas a devolver en lugar de un número absoluto. Esta es la cuesti... [Más]

Cómo crear un gestor de errores universal en una aplicación Windows Forms

Cómo crear un gestor de errores universal en una aplicación Windows Forms
Cuando programamos una aplicación, aparte de hacer que ésta cumpla todos los requisitos puramente funcionales e implemente los algoritmos que sean necesarios, es igualmente imortante realizar un estudio sobre las posibles excepciones y errores que se puedan producir durante su ejecución. De este modo podremos responder elegantemente a estas situaciones, en lugar de permitir que nuestros usuarios vean un diálogo horroroso con detalles técnicos y se acabe la aplicación sin previo aviso. Para ello añadimos cantidad de sentencias de gestión de excepciones try-catch-finally en todo el código, gestionando cada posible error o excepción. Por muy bien que lo hagamos, sin embargo, siempre habrá cosas que se nos escapen y que produzcan el fatídico diálogo que mencionaba hace un momento. Para asegurarnos de que esto no ocurre podemos crear un gestor de errores universal que se ejecute de forma automática al producirse alguna excepción que no hemos gestionado adecuadamente. Hacerlo es muy senci... [Más]

Cómo cambiar la resolución de la pantalla mediante código

Cómo cambiar la resolución de la pantalla mediante código
Obtener la resolución actual de la pantalla es algo inmediato si utilizamos el objeto System.screen, ya que su propiedad Bounds nos indica este dato en sus propiedades Width y Height: screen.Bounds.Widthscreen.Bounds.Height Realmente sencillo. Lo que ya es harina de otro costal es hacer que mediante código se cambie la resolución actual de la pantalla. La plataforma .NET no ofrece soporte para esta operación desde ninguna de sus clases pero, como siempre, la API de Windows viene a nuestro rescate. Se trata de un viejo truco de los tiempos de Visual Basic. Necesitamos utilizar las dos funciones siguientes de la biblioteca User32.dll: · EnumDisplaySettings: Ofrece toda la información necesaria sobre las pantallas disponibles en el sistema (puede haber más de una, claro, yo de hecho trabajo con una tarjeta dual que tiene dos monitores enchufados). Su definición es la siguiente (copiada de MSDN): BOOL EnumDisplaySettings( LPCTSTR lpszDeviceName, // display device DWORD iMode... [Más]

Cómo crear una ventana que ocupe toda la pantalla

Cómo crear una ventana que ocupe toda la pantalla
Bueno, parece una pregunta tonta, pero no lo es tanto si queremos que además de ocupar el área disponible del escritorio también cubra la barra de tareas y las bandas del escritorio que hubiese establecidas. Para que una ventana Windows Forms ocupe toda la pantalla incluyendo la barra de tareas hay que darle el tamaño adecuado y además asegurarnos de que no está maximizada. El siguiente código ilustra lo que se necesita para instanciar un formulario así: MiForm frm = new MiForm();frm.FormBorderStyle = FormBorderStyle.FixedSingle;Rectangle formrect = Screen.GetBounds(frm);frm.Location = formrect.Location;frm.Size = formrect.Size;frm.WindowState = FormWindowState.Normal;Application.Run(frm); Esto es, por ejemplo, lo que hacen las pantallas de los programas de instalación. ¿Has probado a maximizar la ventana de fondo (azul normalmente) de un programa de instalación? Pues al hacerlo de repente ya no es capaz de cubrir la barra de tareas. Es conveniente a este tipo de ventanas quitarle... [Más]

Siguiendo con las consultas peliagudas...

Siguiendo con las consultas peliagudas...
Otra consulta que puede resultar de interés es aquella que nos permite identificar dentro de los registros de una tabla cuáles son los que están duplicados y así poder, por ejemplo, eliminarlos o cambiarlos. ¿Alguna idea de cómo conseguir esto?.... Piénsalo un poco más... ;-) Solución: SELECT nombre_campo, COUNT(*) FROM Nombre_Tabla GROUP BY Nombre_Campo HAVING COUNT(*) > 1 Esta vale para cualquier gestor de datos y permite obtener los resultados agrupados por el campo que queramos para localizarlos más fácil.

Consulta para escoger aleatoriamente registros de una tabla

Consulta para escoger aleatoriamente registros de una tabla
El otro día seme planteó el siguiente problema: ¿cómo puedo hacer para obtener con una consulta SQL un número 'N' de registros elegidos aleatoriamente dentro de una tabla con miles de registros? En SQL Server hay, por lo menos, dos formas de hacerlo. - Consulta 1: la complicada SELECT TOP N * FROM Nombre_Tabla ORDER BY RAND( (@@IDLE % IDENTITYCOL ) + DATEPART( ms , CURRENT_TIMESTAMP )  + IDENTITYCOL) De este modo se devuelven N identificadores de la tabla elegidos aleatoriamente. Lo que hace es coger un valor aleatorio en cada "vuelta" para un valor autonumérico que actúa como clave primaria de la tabla. Esto no es problema casi nunca ya que la mayor parte de las tablas suelen poseer un campo de este tipo. Sin embargo... - Consulta 2: más sencilla y genérica SELECT TOP N * FROM Nombre_Tabla ORDER BY NewID() Este método como se ve no presupone nada y sirve incluso para tablas sin clave primaria y para consultas cruzadas con otras tablas. Interesante ¿verdad?

Algunas sutilezas sobre paso de parámetros por referencia y por valor en C#

Algunas sutilezas sobre paso de parámetros por referencia y por valor en C#
Cuando se pasa una clase como parámetro a cualquier método de C# ésta se pasa siempre por refencia. Y a continuación paso a explicar esta "obviedad"... Las clases son tipos por referencia por lo que cuando se pasan como parámetro a un método, cualquier cambio que se realice sobre ellas desde dentro del método (asignar una propiedad o cualquier otra cosa que cambie su estado), se conserva al terminar la llamada al método. Sin embargo existe una palabra clave en el lenguaje llamada ref que sirve para pasar parámetros por referencia. ¿cuál es su objeto entonces si las clases se pasan por referencia siempre? Su objeto es pasar por referencia los llamados "tipos por valor". Tipos por valor son las estructuras y los tipos básicos (int, bool, etc...). Éstos, salvo que se indique explícitamente, siempre se pasan por valor, es decir, se pasa una copia de los mismos a la pila para su procesamiento. Consideremos el siguiente ejemplo: class Persona{    public string Nombre = "Original";} .... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico