JASoft.org

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]

Experience Pack para Tablet PC: ¡Descárgalo ya!

Experience Pack para Tablet PC: ¡Descárgalo ya!
Si tienes un Tablet PC las nuevas herramientas que ha puesto Microsoft a disposición pública te van a encantar. Las ha denominado Tablet PC Experience Pack, y son añadidos que complementan muy bien a las PowerToys que ya tiene Microsoft para este sistema operativo, ya que de hecho un par de herramientas de las incluidas son PowerToys mejoradas. Ink Desktop: Permite la captura de información manuscrita directamente en el escritorio, sin necesidad de abrir un programa especial. Mucho mejor y más rápido que tomar notas de esas amarillas, y además más difícil de pasar por alto ;-)   Snipping Tool: Mejora de una de las Powertoys. Permite capturar porciones de la pantalla rodeándolas a mano, y luego comentarlas con tu propia letra para enviarlas por correo electrónico o guardarlas.   Ink Art: conviérte en un Picasso pintando directamente a mano en la pantalla con herramientas que simulan utensilios comune de los artistas, como pinceles, carboncillo, etc... También es una mejora de un ... [Más]

C#: el lenguaje preferido de los programadores

C#: el lenguaje preferido de los programadores
Un reciente encuesta en línea realizada por ComputerWorld  entre suscriptores de todo el mundo de empresas de más de 100 empleados ha revelado que el lenguaje de programación preferido por éstos es C# frente a Java. En lo que se refiere a arquitecturas de desarrollo .NET también quedó por delante de las emás, seguida por Linux/UNIX y después Windows/COM/DCOM. Algunos otros resultados interesantes: Un porcentaje bajísimo de los encuestados tiene pensado desarrollar aplicaciones en breve para Linux (4%), dispotivios inalámbricos (7%) o para sistemas de 64 bits (9%). Casi la mitad de los encuestados (48%) dicen que no utilizan UML en el diseño de sus aplicaciones dentro de su empresa. Más de la mitad (58%) están usando servicios Web en sus desarrollos, y sólo un 9% dijeron que no les interesaba esta tecnología. Sólo el 45% confiesa que utiliza entornos de desarrollo integrados en lugar del bloc de notas (35%). Puedes ver los resultados completos de esta encuesta en la web de Com... [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?

Disponible ya el Service Pack 3 de WSE 2.0

Disponible ya el Service Pack 3 de WSE 2.0
Web Services Enhancements 2.0 (WSE 2.0) es el paquete para .NET que permite crear servicios Web avanzados siguiendo las propuestas para estándares en seguridad, enrutado, etc... que marca el W3C. WSE es casi indispensable para la creación de aplicaicones empresariales serias que se basen en Servicios Web. Puedes encontrar una introducción aquí. Microsoft acaba de liberar el Service Pack 3.0 para WSE 2.0. Este parche trae algunas correciones relativas al uso de certificados digitales X.509 y testigos de autenticación, y cambia la forma de trabajar de algunas características. Puedes leer todos los cambios aquí. El paquete así como su documentación y distribuíbles se pueden obtener gratuitamente desde la dirección http://msdn.microsoft.com/webservices/building/wse/.

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