ORDER BY en SQL Server, la parte confusa.

OrderBySqlServer

Probablemente una de los aspectos más confusos en T-SQL es entender cuando el resultado de una consulta se devuelve en un orden particular o cuando no. Para este artículo utilizaremos la base de datos de Microsoft, Northwind.

Consideremos en la siguiente consulta:


SELECT EmployeeID, FirstName, LastName, City, MONTH(BirthDate) AS BirthMonth
FROM Employees
WHERE Country = 'USA' AND Region = 'WA'

¿Existe una garantía de que las filas van a ser devueltas en un orden particular, y si es así, cual es ese orden?

Sigue leyendo

Anuncios

Restricciones en SQL Server

Las restricciones son limitaciones o reglas aplicadas a un campo o columna para asegurar que no se acepten datos que no se consideren válidos. Por ejemplo, si hay que insertar la fecha de nacimiento de una persona, la fecha debe de ser menor que la fecha actual; ya no se permitiría añadir una persona con fecha de nacimiento futurista. A partir SQL Server 2008 están disponibles una serie de restricciones, incluidas las siguientes:

Sigue leyendo

[Truco]: Como abrir el CMD desde una ruta especifica

En ocasiones, ya sea cuando estemos trabajando en programación o infraestructura es necesario abrir el CMD o Command Prompt de Windows desde una carpeta en específico, y si esta ruta es larga puede ser un poco incomodo y lento desplazarnos hasta ella mediante comandos desde el cmd, así que más abajo les enseño como hacer lo mismo desde el Explorador de Windows.

Solo basta con desplazarnos hacia el directorio donde queremos abrir el CMD o Command Prompt y mientras presionamos la tecla Shift hacer clic derecho en un espacio en blanco, esto mostrará el menú desplegable habitual con una nueva opción “Open command window  here” o en español “Abrir ventana de comandos aquí. Esto funciona de igual manera presionado Shift y haciendo clic derecho sobre una carpeta o folder como se muestra en la imagen de mas abajo.

abrir-cmd

Diferentes maneras de abrir el CMD o Command Prompt desde una ruta específica

Estas dos formas darán el mismo resultado, el CMD se abrirá en la ruta especificada:

cmd_abierto

CMD o Command Prompt abierto en la ruta especificada

Para hacer esto no es necesario tener nada especial instalado, siempre y cuando tengas Windows 7 o superior.

Si te queda alguna duda puedes ver el siguiente vídeo donde lo explico, de paso puedes suscribirte al canal.

Espero que este sencillo, pero útil truco te haya servido.

¡Saludos!

C#: Leer información binaria de un archivo BMP

Desde C# podemos leer cualquier archivo de manera binaria con la clase BinaryReader, la cual en uno de sus constructores recibe una secuencia de bits especificada, es decir el archivo a leer con valores binarios, también necesitaremos usar algunas propiedades y métodos de esta clase que les explicaré más adelante. Para usar esta clase necesitamos el espacio de nombres System.IO en nuestro proyecto.

Desde una aplicación de consola en C# leeremos una imagen de formato BMP, y podremos obtener informaciones como el alto, ancho y cantidad de bits por pixeles, empecemos:

Luego de crear nuestro proyecto de consola en C# crearemos un método que nos permitirá especificar y validar la ruta donde se encuentre el archivo .bmp que queremos leer y la retorne para poder ser utilizada más adelante.

static string ValidateAndSetPath()
{

Console.WriteLine("Introduzca la ruta del archivo BMP | Enter the path of the BMP file:");

var localPath = Console.ReadLine(); //Guarda la ruta introducida | Save the path entered

//Valida que la ruta y la extension del archivo sean correctas
//Validate that the path and extension of the file  is correct
while ((!localPath.Contains(".bmp") && !localPath.Contains(".BMP")) || !File.Exists(localPath))
{
Console.WriteLine("\nES: Asegurese de que escribió la ruta y la extension (.bmp) correctamente\nEN: Be sure that the path and extension (.bmp) are correct");

localPath = Console.ReadLine();
}

return localPath;
}

El método Contains recibe como parámetro una cadena o string a buscar y determina si esta contenida dentro de otra cadena, en este caso de la cadena de la variable localPath, mientras que el método Exits de la clase File determina si un archivo existe en una ruta especificada. Como podrán ver esas sentencias están negadas (!) y evaluadas dentro de un ciclo while lo que indica que mientras la cadena introducida por el usuario no contenga el cadena .bmp o .BMP y el archivo no exista, avisará al usuario y le indicara que introduzca nuevamente la información correctamente, luego, si todo esta correcto devolverá la ruta del archivo.

Luego en el método Main de nuestro proyecto vamos a declarar varias variables que almacenaran la información que obtendremos del archivo como el alto, ancho y cantidad de bits por pixeles así como el archivo en binario, con la propiedad BaseStream que nos permite el acceso a los bits y el metodo Seek nos desplazaremos por los bytes hasta obtener la información que necesitamos, pero para eso tenemos que conocer la estructura de un archivo BMP.

BMP-File-Structure

Estructura de archivo BMP – Structure of BMP file

En la imagen anterior podemos ver que cada sección del archivo tiene una cantidad de bytes, por los cuales debemos movernos, la información que nos interesa está en la sección InfoHeader, por lo que debemos “pasar” la sección Header, y esto es sumamente fácil con el método Seek de la propiedad BaseStream, este método recibe como parámetro la cantidad de bytes que nos queremos desplazar y desde donde, en nuestro caso la primera información que queremos es el ancho o width en ingles, la cual esta a partir del byte 18, para saber eso simplemente sumé los 14 bytes de la sección Header más 4 bytes del Size (información que no nos interesa) que esta dentro de la sección InfoHeader, haciendo este desplazamiento desde el inicio del documento. Veámolos en código:

static void Main(string[] args)
{

//Variables
var path = ValidateAndSetPath();
var width = 0;
var heigth = 0;
var bitsPerPixel = 0;
BinaryReader bmpFile; //BMP File in binary


bmpFile = new BinaryReader(File.OpenRead(path)); //Lee la ruta como un archivo binario | Reads the path as a binary file

bmpFile.BaseStream.Seek(18, SeekOrigin.Begin); //Posiciona la "cadena" de bytes en el bit indicado | Set the position in the current stream.

width = bmpFile.ReadInt32(); //Guarda 4 bytes, correspondiente al ancho de la imagen | Save 4 bytes, of the width of the image
heigth = bmpFile.ReadInt32();//Guarda 4 bytes, correspondiente al alto de la imagen | Save 4 bytes, of the heigth of the image

bmpFile.BaseStream.Seek(2, SeekOrigin.Current); //Posiciona la "cadena" de bytes en el bit indicado desde la posicion actual | Set the position in the current stream from the current position

bitsPerPixel = bmpFile.ReadInt16(); //Guarda 2 bytes correspondientes a los bits por pixeles de la imagen | Save 2 bytes for the Bits por pixels of the imagen

Console.WriteLine($"\nAncho | Width: {width}\nAlto | Heigth: {heigth}\nBits por Pixel | Bits per Pixel: {bitsPerPixel} bits");


bmpFile.Close(); //Cierra el archivo en uso | Close the file


Console.ReadKey();

}

Y listo, con esto podemos tener obtener el el alto, ancho y cantidad de bits por pixeles de un archivo de imagen BMP. Elementos a tener en cuenta es utilizar el tipo de datos adecuado al momento de leer los bytes desde el archivo guiándonos desde la estructura del mismo, si se fijan para almacenar la información en la variables width y height utilicé el método ReadInt32() que lee 4 bytes, mientras que para la variable bitsPerPixel utilicé el método ReadInt16() que lee 2 bytes que son el tamaño correspondiente de estos datos indicados en la estructura del archivo, si utilizan un tipo de datos no adecuado podrían estar leyendo información de más o de menos. Otro punto importante es cerrar el archivo después de su uso.

BMP-Info-Reader

Prueba de la aplicación.

 

El código del proyecto completo esta disponible en mi GitHub: robertlluberes/BMP-File-Info-Reader

Referencias: [ BinaryReader, Structure of BMP file, C# Seek File Examples: ReadBytes ]

 

SQL Server: Triggers

Un Trigger o desencadenador es un tipo de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento de Lenguaje de Manipulación de Datos (DML), o sea cuando se ejecuta un INSERT, UPDATE o DELETE en una tabla o un evento de Lenguaje de Definición de Datos (DDL) en este caso un DROP TABLE o ALTER TABLE en una base de datos.

La sintaxis básica es la siguiente:

CREATE TRIGGER nombre_trigger
ON { tabla | DATABASE } --Tabla a la que se establecerá el Trigger o la palabra reservada DATABASE para Triggers DDL
{ FOR }{ INSERT, UPDATE, DELETE, DROP_TABLE, ALTER_TABLE} --Evento que se desea lanzar (se puede usar más de uno)
DECLARE @nombre_variable TIPO --Nombre y tipo de datos de la variable si se desea crear
AS Bloque de instrucciones

Sigue leyendo

4 maneras super sencillas para que tu computador encienda más rápido

img_9228-768x512

PC Workstation

Aunque mantengas tu computador libre de virus y te abstengas de descargar programas sospechosos, tu computador dejará de encender tan rápido como solía hacerlo. Pero no te preocupes, hay algunos pasos sencillos para hacer que tu Mac o PC enciendan casi tan rápido como si la hubieses acabado de sacar de la caja.

1. Mantén tu escritorio limpio.

Una de las maneras más sencillas de acelerar el encendido de tu computador es limpiando tu escritorio (Me refiero al escritorio que tiene tu fondo de pantalla, no en el que pones el computador fïsico). Mientras más archivos, fotos, folders y programas tengas en tu escritorio, más cargado estará el computador a la hora de encender.

No tienes que remover todo de tu escritorio, pero ya no es necesario tener tantas cosas en él. En Mac, puedes mantener los programas y aplicaciones que más utilices en el dock, y en Windows puedes anclar tus programas favoritos a la barra de tarea haciendo clic derecho y seleccionando la opción de anclar.

Usar tu escritorio como almacenamiento para archivos y fotos está bien por un periodo corto, pero cuando ya no puedas ver la mitad de tu fondo de escritorio, es tiempo de comenzar a mover esos archivos a otros folders un poco más profundo en tu computador. Sigue leyendo

La NASA pone la ciencia ficción en el espacio con HoloLens de Microsoft

La NASA está llevando la realidad virtual al espacio, el pasado Diciembre una misión de reabastecimiento alcanzó exitosamente la Estación Espacial Internacional (en inglés, International Space Station o ISS). Entre la carga habían dos Microsoft HoloLens para ser usados como parte del proyecto Sidekick de La NASA.

Sigue leyendo