.NET Tutorial 10. Iniciación a las bases de datos con SQL Server

Sin lugar a dudas, una de las principales areas en el ámbitoinformático es el procesamiento, interpretación y alamcenamiento deinformación en base de datos (BDD).

Casi todas las páginas que pululan por internet guardan sus datos enBDD, un claro ejemplo son los foros, cómo por ejemplo el foro deMeristation.

Todos los post se guardan cómo "registros" en una / unas base dedatos que luego el código (php, asp, ….) del foro nos muestra.

Sin embargo también se utilizan las bases de datos para aplicaciones "Windows", para almacenar la información de forma ordenada.

Las "bases de datos" son casi tan viejas cómo la informática. Desdesiempre se ha necesitado guardar información de alguna forma. Podríamosconsiderar las tarjetas perforadas como las primeras "bases de datos".

Básicamente existen dos topologías de bases de datos: (a muy, muy groso modo)

  1. Las bases de datos son ficheros individuales
  2. "Servidor" de datos

En el primer ejemplo podemos encontar por ejemplo archivos tipo Access.
En el tema de "Servidores" de datos han proliferado multitud de sistemas. Oracle, MySQL, SQL Server, Postgre SQL, etc, etc.

Obviamente estas dos topologías tienen sus pros y sus contras:

Base de datos cómo ficheros individuales:

  • La gran ventaja es que al ser ficheros individuales se pueden "copiar" fácilmente
  • Normalmente su mantenimiento es fácil y no se necesitan grandes recursos. Su intalación suele ser nula, ya que la imensa mayoria de PC (hablo de entorno Windows) ya disponen de librerías para su manejo

Sin embargo presentan los siguientes inconvenientes:

  • Al tratarse de archivos individuales, se desaconseja su uso para aplicaciones donde pueda haber concurrencia. Es decir, ¿Que ocurre si dos, tres o trescientos usuarios acceden al mismo tiempo a dicha base de datos?
  • Normalmente, y a no ser que se desarrollen aplicaciones especiales, no se pueden usar estas bases de datos a través de internet. (Quizas podría usarse algún driver ODBC, pero omitiremos este punto)
  • Por norma general, estas bases de datos tienden a "corromperse" con el riesgo que esto supone: perder todos los datos
  • También por norma general estas bases de datos no estan "pensadas" para almacenar gran cantidad de registros (aunque he visto base de datos de Access con tablas que contenian mas de 50.000 registros)

 "Servidores" de datos:

Una de las principales ventajas de estos sistemas es que estandiseñados para que dos, tres o trescientos usuarios puedan acceder almismo tiempo a las bases de datos.
Puede parecer una chorrada, por no podéis llegar a imaginar la dequebraderos de cabeza que puede llegar a dar la "concurrencia" a lahora de acceder a una base de datos.

Por otro lado estos sistemas suelen ser muchísimo más robustos, loque hace que las bases de datos no se "corrompan" y no perdamos datos.

Obviamente este tipo de topología sí que está pensada trabajar "enred". Se puede acceder a la base de datos desde un PC que está enBurkina Faso o desde otro que esta en Honolulu.

Aunque claro, siempre hay "peros":

  • El mantenimiento de estos sistemas es bastante más complejo que en el caso de usar archivos individuales
  • En este caso, "copiar" una base de datos de un sistema a otro no es tan trivial cómo en el caso de los archivos individudales

Visual Studio .NET puede trabajar de forma nativa con SQL Server.

Existe una versión Express, al igual que VB.NET Express, o C# Express que es completamente gratuita.

Visual Studio .NET 2005 y Visual Studio 2008 (por lo menos lasversiones "Professional") instalan por defecto SQL Express 2005 comoservidor de SQL predeterminado.

No sé si las versiones Express de Visual Basic .NET o C# instalaneste SQL server, si no es así siempre puedes descargartelo desde lapágina de Microsoft. Página oficial de SQL Server 2005 Express.

Nota: Existe una nueva versión de SQL Server Express, la 2008.

Una vez instalado SQL Server 2005 Express ya tendrás tu servidor listo para poder trabajar con él.
Esto puede ser realmente "complejo", pero de nuevo tendremos unaherramienta "Visual" para manejar nuestras bases de datos.

Estaherramienta es el Microsoft SQL Server Management Studio Express (oabreviado, el MSSMSE). Lo puedes descargar desde ésteenlace. Cómo verás hay dos links de descarga: la versión de 32 bits ola de 64 bits. Si tienes un S.O. de 64 bits puedes descargar el SQLServer2005_SSMSEE_x64.msi.

La instancia por defecto del SQL Server 2005 Express se llamará:

nombre_del_pcSQLEXPRESS

Puedes instalar tantos servidores SQL cómo quieras, aunque claro, cuantos más instales, más recursos consumirá.

SQL Server  se ejecuta cómo servicio de Windows, no cómo un proceso y normalmente con el nombre MSSQL&nombre_de_la_instancia, por ejemplo MSSQL&SQLEXPRESS.

Por defecto, SQL Server Express se instala para trabajar de forma"local". Si queremos que nuestro servidor de SQL se pueda ver en unaLAN o incluso desde internet tendremos que modificarlo desde laconfiguración de superficie:

Además, deberermos activar el protocolo TCP/IP.

Si queremos que nuestro servidor sea accesible desde "elexterior"deberemos anotar el puerto por el que se realizará lacomunicación con el servidor, para abrirlo en nuestro router y firewall(Abrir el puerto en el router y redirigir el tráfico al PC donde seestá ejecutando el servidor de SQL sólo será necesario si queremos quese pueda acceder desde fuera de nuestra red):

Por útlimo una vista del  Microsoft SQL Server Management Studio Express:

Desde el Microsoft SQL Server Management Studio Express podremos crearnuevas bases de datos, nuevas tablas, crear vistas, consultas, crearcopias de seguridad, diagramas, etc, sería como el "Access" pero paraSQL Server. Y cuando se sabe manejar, es una herramienta increiblementepotente.

En las próximas entregas veremos cómo crear una base de datos en nuestro servidor de SQL Server y cómo acceder a ella por código, dando de alta nuevos registros, modificando los existentes, borrando, etc.

Espero vuestras dudas y/o consultas

 

Saludos.
mov eax,ollydbg; Int 13h  

.NET Tutorial 9. Crear mapeados de tamaño infinito (Parte I)

Una de las formas más fáciles y rápidas para crear un mapeado para un juego 2D es utilizando lo que se conoce cómo Tiles.

En esencia, nuestro mapeado estará formado por un array de Tiles, donde cada Tile estará representado por un sprite o bitmap.
El "problema" se encuentra en cómo mover dichos tiles para dar la sensación de movimiento, o lo que también se conoce como scroll.

Supongamos la siguiente situación:

En este caso tenemos un "mapeado" de 13 x 9 tiles (13 columnas y 9 filas)
La pantalla está representada por el rectangulo gris. Es decir, lo que se mostrará en pantalla es una "porción" de todo el mapeado, en este caso de 3 x 2 tiles.
El primer tile que se va a dibujar siempre será el de la esquina superior izquierda (marcado en rojo). Los tiles se dibujaran de izquierda a derecha y de arriba a abajo.
Los tiles marcados de azul marcarán el límite de nuestro bucle de dibujado.

Está claro que no vamos a dibujar todos aquellos "gráficos" que no están "dentro" de la pantalla. Sería un desperdicio tanto de tiempo como de recursos.

Suponed ahora movemos a nuestro personaje hacia la derecha y hacia abajo:

Los tiles que se mostrarán en pantalla serán aquellos que están en la zona gris. El resto de tiles no se dibuja.

Si movemos nuestro personaje más a la derecha y mas hacia abajo:

Al igual que antes, los tiles que se dibujarán serán sólo aquellos que están en la zona gris.

Pues bien, dibujar sólo los tiles necesarios es tan simple como esto:

For columna = Yorg To Yorg + TotalTilesY_Pantalla
For fila = Xorg To Xorg + TotalTilesX_Pantalla
TileSheet.Draw(dc, auxX, auxY, Mapeado(columna, fila))
auxX += AnchoTiles
Next
auxY += AnchoTiles
auxX = origenX
Next

Cómo veis se trara de un bucle anidado donde Xorg e Yorg representa la fila y columna del tile de la esquina superior izquierda (el tile que estaba marcado en rojo en las imágenes anteriores)

En nuestro ejemplo tenemos el siguiente sprite sheet:

Y el resultado es el siguiente:

Podrás observar que el fichero del "mapeado" se encuentra en la carpeta Levelsmapa1.txt y que cómo podrás ver es un simple fichero de texto que indica que tile se va a dibujar en cada (fila, columna).

Llegados a este punto y viendo el resultado siempre puede haber alguien que piense.."pfff…que gráficos mas cutres, no entiendo para que sirve todo esto".

Bien, bien, bien, querido padawan…:D
¿Y si utilizamos el siguiente sprite sheet?

El resultado de nuestro "mapeado" sería el siguiente:

Os recuerdo que esto es .NET, y sí, ya sé que esto mismo se puede hacer con RPGmakers y similares, pero la gracia está en hacerlo en .NET, ya que esto es un blog sobre .NET 🙂

 

Apuntes finales.

Las teclas de movimiento son los cursores. Pulsa la tecla ESC para finalizar.
En la carpeta de la aplicación se encuentra el fichero FullScreen.ini donde puedes "configurar" si quieres que la aplicación se ejecute en modo pantalla completa o no.

Es recomendable que mires el Tutorial 6 si no entendiste como se carga un sprite sheet.

Pues esto es todo, que no es poco.
Si no entendeis algo del código ya sabeis, comentad 🙂

 

Saludos.
mov eax,ollydbg; Int 13h 

 

Descargar proyecto .NET Tutorial 9
(143 KB. Visual Studio 2008)

 

08/Junio/2009 Actualización 

Me han comentado que el tutorial en un equipo monocore el mapeado no se "mueve".
He añadido un hilo (Thread) para controlar el movimiento de las teclas. Ahora debería poder moverse en equipos de un sólo núcleo.
Además he corregido un pequeño bug cuando se ejecuta la aplicación a pantalla completa.

Si encontrais algún fallo más no dudeis en comentarmelo.

 

Descargar proyecto .NET Tutorial 9 (Parche)
(143 KB. Visual Studio 2008)