sábado, 7 de junio de 2014

Oracle DB 11G - DBMS_CRYPTO: Encriptamiento y desencriptamiento de datos.

Antes de iniciar este tutorial, lo recomiendo para personas que tengan un conocimiento intermedio sobre PLSQL y a aquellos que les gusta investigar el porque de las cosas.




Introducción.
En esta ocasión aprenderemos a encriptar y desencriptar datos usando Oracle 11 G (en mi caso la versión XE).

Anteriormente se utilizaba el paquete DBMS_OBFUSCATION_TOOLKIT a partir de Oracle8i, que soporta encriptación DES y triple DES (Data Encription Standard), y con ciertas limitaciones (por ejemplo, los datos a encriptar han de ser un múltiplo de 8 bytes). 

En la actualidad se utiliza DBMS_CRYPTO. Soporta más formas de encriptación, como la AES (Advanced Encription Standard), que sustituye el anterior DES y no hay limitación con el número de carácteres.

Entre las características de DBMS_CRYPTO es que puede ser utilizado en un bloque PLSQL tal como un store procedure.

En la sintaxis, de la encriptación como de la desencripción se utilizan 4 parámetros:
src --> Indica datos de tipo RAW para desencriptar.
typ --> Tipo de cifrado.
key --> Llave de encriptación y desncriptación utilizada.
iv --> Es un vector opcional para bloque de cifrado. Por defecto se usa NULL.

Práctica.
Y esta es la parte divertida.

1. Crearé una tabla de parámetros, en donde almacenaré las llaves que usaré para la encriptación y desencriptación.

CREATE TABLE ADM.ADM_PARAMETER
(
  ID_PARAMETER    NUMBER(4)                     NOT NULL,
  PARAMETER_NAME  VARCHAR2(10 BYTE)             NOT NULL,
  PARAMETER       VARCHAR2(500 BYTE)            NOT NULL
)

2. La poblaré con una llave de encriptación (inventada):
Insert into ADM.ADM_PARAMETER
   (ID_PARAMETER, PARAMETER_NAME, PARAMETER)
 Values
   (1, 'KEY_CRYPT', 'a5b7c9d0a5b7c9d0a5b7c9d0a5b7c9d0a5b7c9d0a5b7c9d0a5b7c9d0a5b7c9d0');
COMMIT;

3. Paso muy importante, para Oracle 11 XE hay que habilitar permisos de EXECUTE sobre DBMS_CRYPTO, de lo contrario no correrá:
  • Entramos a la base como SYS as SYSDBA.
  • Ejecutamos el comando:
    • grant execute on dbms_crypto to PUBLIC;
Esto para poder ejecutarlo en cualquier USER, sino solamente agregamos el USER que queremos que tenga permiso.

Si esto no les sirve GOOGLE, en mi caso fue funcional.

4. Una vez tenemos permisos de ejecución, crearemos la lógica de encripción y desencripción. En mi caso particular cree un paquete al que le llame ADM_UTIL. Adjunto el código del paquete:


La parte log no la usaremos para este ejemplo (la función RECORD_LOG especificamente).

5. Ahora, bastará ejecutar el siguiente Bloque anónimo para probar su funcionalidad:

DECLARE
in_string VARCHAR2(200) := 'Texto Encriptado';
out_string VARCHAR2(200);
BEGIN
out_string := ADM.ADM_UTIL.encryptor(in_string);
DBMS_OUTPUT.PUT_LINE('Encrypted Text: ' || out_string);
out_string := ADM.ADM_UTIL.decryptor(out_string);
DBMS_OUTPUT.PUT_LINE('Decrypted Text: ' || out_string);
END;

Habiliten el DBMS_OUTPUT  de su administrador de base de datos para ver los resultados.

Hasta aquí con este tutorial, si hay preguntas en los comentarios.

miércoles, 28 de mayo de 2014

Instalación de Oracle Database Express Edition 11g en Windows 7 64 bits

Si han encontrado este tutorial es porque como yo, tuvieron problemas para instalar esta versión de la base de datos en su computadora ya que el instalador por defecto es para 32 bits y su equipo cuenta con el sistema 
operativo de 64 bits.



Se los explicaré en 8 pasos que he testeado en dos equipos diferentes.

EL PROCESO:

1. El primer paso será bajar la base de datos, si ya lo hicieron solo omitanlo. Si no lo han hecho haganlo desde acá:


2.Extraigan el archivo en zip que descargaron y busquen el archivo SETUP, ejecutenlo como administrador.

3.La instalación comienza normal, hasta que el instalador despliega el primer error similar al siguiente:
<The installer is unable to instantiate the file C:\Users\ … \KEY_XE.reg. This file does not appear to exist.>

4. No hay que cancelar nada hasta este punto, solo hay que crear en la ruta de temporales similar a:
<C:\Users\betaroot\AppData\Local\Temp\{8D6436F9-C040-4885-9DCD-32A8781DC437}\>

Nota: el código despues de <Temp\...> varía en cada instalación, por lo que deben buscar la que les corresponde.

Copien la ruta.

5. Abran regedit como administrador y localicen el folder <HKEY_CLASSES_ROOT → Installer → Products → 266B7A503.... → SourceList → Media >
allí encontrarán un archivo denominado "1" bajo el campo de datos pueden observar "DISK1;1". Click allí y Modificar.

6. Rellenar con la ruta que copiaron en el paso 4:
<C:\Users\betaroot\AppData\Local\Temp\{8D6436F9-C040-4885-9DCD-32A8781DC437}\>

7. Si ya copiaron Click en OK y cierren el regedit, regresen a la instalación de Oracle y presionen OK en el diálogo.

8. Esperen a que la instalación finalice, y prueben la conexión a su nueva base instalada.

9. Cualquier duda será un gusto atenderla en los comentarios.

lunes, 25 de febrero de 2013

Age of Empires.

Por primera vez en el blog presentaré un tema diferente y es que esta vez abordaremos el tema de un videojuego en particular que estoy seguro alguna vez en su vida vieron o jugaron. Se trata de juego Age Of Empires que fue una bomba y quizás para algunos siga siéndolo.

Age Of Empires es lo que se conoce como un videojuego de estrategia en tiempo real (RTS), que a diferencia del tradicional RPG (Role Playing Game) no des por turnos, sino que todo ocurre en el mismo tiempo en que se ordena alguna acción. Los juegos son desarrollados por Ensemble Studios y es Microsoft Game Studios quien los publica.

El juego describe distintos períodos históricos y permite al jugador librar batallas épicas y conquistar a sus oponentes. Así como también ir cumpliendo diferentes tareas que se asignan a lo largo del juego.

Una característica muy particular de este juego es la inclusión de AI (Artificial Intelligence en inglés), que permite a un jugador mediante Scripting que es entendible para el juego crear estrategias únicas para un jugador computadora de manera que puedes controlar casi todos los aspectos relacionados al jugador computadora.


Age of Empires.
La primera secuela del juego apareció por primera vez el 26 de Octubre de 1997, contaba con 12 civilizaciones, el juego se desarrolla en una línea de tiempo de 3000 años desde la edad de Piedra hasta la edad de Hierro.  La secuela ha vendido millones de copias a nivel mundial y es considerado uno de los juegos más populares y conocidos de todos los tiempos.

Las doce Civilizaciones con las que cuenta el juego y las habilidades propias de cada civilización son:

  • Asiria: 
    • * +40% de velocidad de disparo de las unidades de arqueria 
    • * Los aldeanos son un 30% más rápidos
  • Babilónica:
    • * Las murallas y las torres doblan sus puntos de resistencia
    • * +30% de velocidad de recuperación de los sacerdotes
    • * +30% de extracción de piedra
  • Choson: 
    • * Suma 80 puntos de resistencia a los soldados con espada larga y legiones
    • * Suma 2 puntos al alcance de las torres
    • * -30% de costo para los sacerdotes
  • Egipcia: 
    • * +20% de extracción de oro
    • * +33% de puntos de resistencia en carros y arqueros sobre carros
    • * Suma 3 puntos al alcancce de los sacerdotes
  • Fenicia: 
    • * -25% de costo para elefantes de guerra y arqueros sobre elefante
    • * +65% de velocidad de disparo de tirremes con catapulta y destructores
  • Griega: 
    • * Los hoplitas, falanges y centuriones son un 30% más rápidos
    • * Los barcos de guerra son un 30% más rápidos
  • Hitita: 
    • * Las catapultas ligeras, catapultas y catapultas pesadas doblan sus puntos de resistencia
    • * Suma 2 punto al ataque de las unidades de arquería
    • * Suma 4 puntos al alcance de los barcos de guerra
  • Minoica: 
    • * -30% de costo para los barcos
    • * Suma 2 puntos al alcance de los arqueros compuestos
    • * +25% de producción agricola
  • Persa: 
    • *+30% de caza
    • * -30% de producción agrícola
    • * Los elefantes de guerra y los arqueros sobre elefante son un 50% más rapidos
    • * +50% de velocidad de disparo de las tirremes
  • Shang: 
    • * -30% de costo para los aldeanos
    • * Las murallas doblan sus puntos de resistencia
  • Sumeria: 
    • * Suma 15 puntos de resistencia a los aldeanos
    • * +50% de velocidad de catapultas ligeras,catapultas y catapultas pesadas
    • * Dobla la producción de las granjas
  • Yamato: 
    • * -25% de costo para arqueros a caballo, exploradores, caballería, caballería pesada y catafracta.
    • * +30% de puntos de resistencia en barcos
    • * Los aldeanos son un 30% más rápidos


Age Of Empires: The Rise of Rome.
El juego es la expansión del anterior, fue lanzado el 31 de Octubre de 1998 presentando nuevas características que lo hacían diferenciarse de su predecesor, mencionamos algunas:
  • El juego presenta nuevas civilizaciones, 4 en total.
  • Aparecen 4 nuevas tecnologías y 5 nuevas unidades.
  • Existen mejoras notables en la interfaz, incluyendo la jugabilidad: la característica de dar doble clic para seleccionar todas las unidades del mismo tipo, la cola de producción.
  • 4 Nuevas campañas, en las que se describe el ascenso de Roma al poder.
  • Se mejora la Inteligencia Artificial del juego.

Las 4 civilizaciones y sus habilidades únicas, en esta expansión son las siguientes:

  • Cartaginesa:
    • * +25% de puntos de resistencia a las unidades de academia y todas las todas las unidades de elefantes 
    • * +25% al ataque contra galeras de fuego
    • * Los transportes son un 30% más rápidos
  • Macedonia:
    • * Suma 2 puntos a la armadura de las unidades de academia frente a soldados con hondas, balistas,helépolis y armas de proyectil
    • * Suma 2 puntos a la visión de las unidades cuerpo acuerpo
    • * -50% de costo para unidades de maquinaria de asedio
    • * Las unidades son 4 veces más resistentes a la conversión
  • Palmirena:
    • * Tributos libres
    • *Doble cantidad de oro por cada viaje comercial
    • * Los aldeanos cuesta 50% más, tienen armadura y traban un 20% más rapido
    • * Los camellos son un 25% más rápidos
  • Romana:
    • * -15% de costo para edificios, excepto torres, murallas y maravillas
    • * -50% de costo para torres
    • * Los soldados con espada son un 33% más rápidos



Age Of Empires II: The Age Of Kings.
Debido al éxito de sus predecesores, Ensemble Studios y Microsoft trabajaron en conjunto nuevamente en la creación y distribución de la tercera entrega de Age Of Empires. Age Of kings logró el éxito nuevamente que inclusive llegó a consolas de videojuegos como Nintendo DS ,Play Station 2 y algunas plataformas móviles.

Fue lanzado el 17 de Septiembre de 1999. Presenta 13 civilizaciones que existieron en el período histórico en donde se desarrolla el juego. El modo multijugador permite hasta 8 jugadores en una misma partida. Algunas características propias del juego:

  • Unidades únicas en cada civilización.
  • Se perfeccionó el sistema de combate, es posible crear distintas formaciones al momento de atacar.
  • Mejora en la interfaz y la jugabilidad

Las civilizaciones y sus bonificaciones especiales se detallan a continuación;
  • Bizantinos:
    • * Edificios +10% puntos de resistencia en la Alta Edad media, +20% en la Edad Feudal, +30% en la Edad de los Castillos, +40 en la Edad Imperial
    • * Camellos, guerrilleros y piqueros cuestan -25%
    • * Brulotes +20% de ataque
    • * Avanzar a la Edad Imperial cuesta -33%
  • Celtas:
    • Bonificación de equipo: Taller de maquinaria de asedio trabaja 20% más rápido
    • * Infantería se mueve 15% más rápido
    • * Leñadores trabajan 15% más rápido
    • * Armas de asedio trabajan un 20% más rápido
    • * Ovejas no se convierten si están en LDV de una unidad celta
  • Chinos:
    • Granjas +45 de alimento
    • * Comienza con 3 aldeanos más, pero -150 de alimento
    • * Tecnologías cuestan - 10% Edad Feudal, -15% Edad de los Castillos, -20% Edad Imperial
    • * Los centros urbanos admiten 10 habitantes
    • * Buques de demolición +50% puntos de resistencia
  • Francos:
    • Jinetes +20% línea de visión
    • * Castillos cuestan -25%
    • * Jinetes +20% puntos de resistencia
    • * Mejoras de granja gratis (requiere molino)
  • Godos:
    • Cuarteles 20% más rápidos
    • * Infantería cuesta -10% en Edad Feudal, -15% en la Edad de los Castillos, -20% en la Edad Imperial
    • * Infatería ataca +1 contra edificios
    • * Aldeanos atacan +5 contra jabalíes
    • * +10 población en Edad Imperial
  • Ingleses:
    • Galerías de tiro con arco: 20% más rápido
    • * Centros urbanos cuestan -50%
    • * Arqueros a pie alcance +1 en la Edad de los Castillos, +1 en la Edad Imperial (+2 en total)
    • * Pastores trabajan un 25% más rápido
  • Japoneses:
    • Galeras +50% LDV
    • * Pesqueros 2X puntos de resistencia; +2P armadura; trabajan +5% Alta Edad Media, +10% Edad Feudal, +15% Edad de los Castillos, 20% Edad Imperial
    • * Molino, campamento maderero y campamento minero cuestan -50%
    • * Infantería ataca 10% más rápido en Edad Feudal, 15% Edad de los Castillos, 25% Edad Imperial
  • Mongoles:
    • Arqueros a caballo, caballería ligera, y armas de asedio mas resistentes y de ataque mas rápido.
    • Los aldeanos cazan un 50% más rápido.
  • Persas:
    • Jinetes +2 ataque contra arqueros
    • * Comienzan con +50 unidades de alimento y de madera
    • * Centro urbano, muelle 2X puntos de resistencia; trabajan +10% Edad Feudal, +15% Edad de los Castillos, +20% Edad Imperial
  • Sarracenos:
    • Arqueros de a pie +1 ataque contra edificios
    • * Cuota de mercado cuesta solo 5%
    • * Barco de transporte 2X puntos de resistencia, 2X capacidad
    • * Galeras atacan 20% más rápido
    • * Arqueros a caballo +3 ataque contra edificios
  • Teutones:
    • Unidades más resistentes a la conversión
    • * Monjes curan desde el doble de distancia
    • * Torres pueden guarnecer el doble de unidades y disparan el doble de flechas
    • * Matacanes gratis
    • * Granjas cuestan -33%
    • * Centro urbano +2 ataque/+5 alcance
  • Turcos:
    • Unidades de pólvora creadas un 20% más rápido
    • * Unidades de pólvora +50% puntos de resistencia, desarrollo de tecnologías con polvora cuestan -50%
    • * Mineros de oro trabajan 15% más rápido
    • * Quimica gratis
    • * Mejora de caballería ligera gratis
  • Vikingos:
    • Muelles cuestan -33%
    • * Barcos de guerra cuestan -20%
    • * Infantería +10% puntos de resistencia Edad Feudal, +15% Edad de los Castillos, +20% Edad Imperial
    • * Carretilla y carro de mano gratis

Age Of Empires II: The Conquerors Expansion.
AoC inicia en el mismo contexto histórico de su predecesor, pero da un pequeño paso más en la historia al ampliar la dinámica y las posibilidades del juego. Mantiene el mismo guion en su desarrollo tanto económico como militar, no obstante introduce algunas mejoras en la IA de algunas unidades que ayudan a tener más tiempo para plantear una estrategia, introduciendo civilizaciones americanas(Mayas y Aztecas), además de algunas otras civilizaciones (Españoles, Hunos y Coreanos), 11 nuevas unidades, 4 nuevas campañas, 26 tecnologías nuevas, más modos de juego y nuevos mapas.

Cinco nuevas civilizaciones: Aztecas, Hunos, Mayas, Coreanos y Españoles.

Nuevas unidades : el arquero de plumas(maya), el guerrero jaguar(azteca), el guerrero águila (maya y azteca) el tarcano(huno), el conquistador y el misionero(españoles),y el Barco Tortuga y el carro de guerra(coreanos). 

Cada civilización tiene ahora una tecnología única. 

Cuatro nuevas campañas: Atila, El Cid, Moctezuma y "Batallas de los Conquistadores", una selección de escenarios independientes entre sí, entre los cuales se pueden recrear: 

La Batalla de Tours (732)
El viaje de Erik el Rojo (1000)
La Batalla de Hastings (1066)
La Batalla de Manzikert (1071)
La Batalla de Agincourt (1405)
La Batalla de Lepanto (1571)
El suicidio forzado de Oda Nobunaga y la expedición punitiva a Kioto de su general Toyotomi Hideyoshi (1582)
La Batalla de Noryang (1598)
Mejora de la interfaz.

Este video lo encontré en Youtube es sobre un escenario personalizado, muy famoso en los canales irc, su nombre es CBA:


Así como este hay muchos escenarios, que crean los diferentes clanes que juegan al AOC alrededor del mundo, aún existen muchos adeptos a este juego.



Age of Empires III.
Después del anuncio del juego el 4 de enero de 2005, una versión de prueba fue lanzada el 7 de septiembre de 2005. Ésta contenía una parte de la versión original del juego, introduciendo nuevas mejoras, como dos escenarios relatando una campaña, dos mapas aleatorios (Nueva Inglaterra y Texas), acceso a dos civilizaciones más (Ingleses y españoles), y una variedad de modificaciones. Una versión de prueba fue lanzada y puesta a disponibilidad con el lanzamiento del juego el 22 de septiembre de 2005.

Age of Empires III es, principalmente, la colección de juegos del Nuevo Mundo durante la era colonial entre, aproximadamente, 1521 y 1850.En sus títulos previos de las series del género, el juego requiere que el jugador desarrolle la nación europea con un convenio básico del imperio, avanzando por medio de las "edades" y misiones, el desarrollo de la tecnología, y destruyendo las bases enemigas. Existen dos ramas de la tecnología en el modo de juego: la economía, caracterizada por la colección de recursos, y la producción de unidades civiles que usualmente recogen recursos; y las militares que supone la producción de unidades militares, y los conflictos entre los ejércitos aliados y rivales.

La historia consiste en un conflicto entre dos o más equipos que pelean por desarrollar su poderosa nación, creando y desarrollando tecnologías y edificios, con la eventual derrota, el jugador puede rendirse antes de sostener combate; el juego termina cuando un solo jugador o equipo queda vivo en el juego. A pesar de las típicas características de un juego RTS, el Age 3 agrega mejoras al jugador, tales como comandar tropas marítimas, edificios, recursos, incluso mejorías (como ventajas militares, económicas) en su ayuda.

En el juego existen tres modos de juego: la campaña de batallas que desarrollan un historia dentro del juego, escaramuza de un jugador (batalla entre el jugador y la computadora) y juegos online multijugador.

En la contienda de un solo jugador, diversas personalidades toman lugar entre jugadores computarizados y humanos, conformando reglas que se pueden modificar antes del juego. El mapa, los recursos y la velocidad de cada jugador puede ser modificada también.




Age of Empires III: The Warchiefs.
La primera expansión de Age of Empires III, que al igual que el juego principal está diseñada por Ensemble Studios.

The WarChiefs añade tres nuevas civilizaciones nativas americanas: los iroqueses, los sioux, y los aztecas. Esta decisión no está exenta de polémica, pues Age of Empires III no incluyó civilizaciones nativas para realizar un juego políticamente correcto y no incluir ninguna referencia al genocidio aborigen.

 De hecho, en Age of Empires III la única forma de luchar contra guerreros nativos es que un enemigo del Viejo Mundo se alíe con una tribu nativa. Los edificios de las aldeas y ciudades nativas no pueden ser atacados, pero todo eso cambiará en la expansión.

 Los Aztecas tienen a su metrópoli de donde recibir refuerzos mientras que los Sioux y los Iroqueses tienen consejos tribales. En el juego aparecen nuevas tribus nativas minoritarias que remplazan a las ex civilizaciones Minoritarias del juego original, estas son: los sioux que serán sustituidos por los Cheyenne, los iroqueses por los hurón y los aztecas por los zapotecas,a veces por los mayas.



Age of Empires III: The Asian Dynasties.
Esta nueva expansión no esta enfocada en América, sino en Asia. Las 3 nuevas civilizaciones asiáticas, tienen 15 maravillas, que serían el equivalente a avanzar de era de los europeos y nativos. Este nuevo juego tiene tres nuevas campañas con cinco escenarios cada una, cada campaña se enfoca en una de las nuevas civilizaciones. El juego salió a la venta en Otoño de 2007.

Hay tres nuevas campañas, una por cada nueva civilización. Además, esas campañas regresan a las campañas históricas de civilizaciones basadas en un solo jugador, que son diferentes que las anteriores campañas en la serie Age of Empires III. Cada campaña consiste en cinco nuevos escenarios.


Conclusiónes.
El juego ha ido evolucionando con el tiempo, pero les puedo asegurar que en todas las versiones tendrán horas de diversión y que lograrán desarrollar mucho sus habilidades para crear nuevas estrategias a medida lo vayan jugando.

La versión que se considera más popular del juego es la Age Of Empires II: The conquerors.  A la fecha existen muchas personas alrededor del mundo que juegan esta versión, lo interesante es la creación de partidas personalizadas para jugar el juego. Para poder acceder a jugar en línea les aconsejo sigan las instrucciones para habilitar los puertos de su router y que puedan jugar en línea: Jugar AOC Multiplayer.

Actualmente existe una versión Online del Age Of Empires, en lo persona nunca la he probado por dicha razón no publico información.

Si quiere jugar en línea AOC les recomiendo visiten esta página.

Nota:
Tengo en Google Drive una copia del Age Of Kings y su expansión, si alguien quiere descargarlo envíen un correo a betarootsv@gmail.com y con gusto les paso el link, no lo publicaré en blogger por todas las leyes y reglas contra piratería que tiene internet ahora.

miércoles, 20 de febrero de 2013

Instalación de Oracle Instant Client 11.2 en Windows 8.


  Buen día,

En esta ocasión quiero compartirles la manera en que instalé el Oracle Instant Client en mi máquina con el no muy agradable Windows 8. Aclaró que este método es 100% funcional en Windows 7 también y probablemente en otras versiones de Windows.



¿Para que te va a servir un Oracle Client?
Se que a más de alguno se le pasó esta pregunta por la mente, y pues la contestaré. Oracle puede conectarse mediante un cliente propio que permitirá acceder a las bases de Datos que tengamos acceso en nuestra red. Si tenes instalado un producto de Oracle como Oracle Forms, Oracle Aplication Server, Oracle Database, etc. tenés instalado un Oracle Client que te permitirá conectarte a una base de datos Oracle. Si sos Desarrollador y no tenes una base de datos Oracle instalada en tu estación de trabajo te será muy útil un Oracle Client.

¿Como un Oracle Client sabe a que base se tendrá que conectar?
Pues Oracle ha simplificado este trabajo ubicando un archivo denominado TNSNAMES con extensión *.ORA, este archivo se encuentra por lo general en algún lugar dentro de network/admin que encontrarán en el árbol de carpetas del producto Oracle instalado. En el tutorial explicaré más a detalle la estructura de este archivo.


Y este es mi Campo de Batalla. Ahora lo que necesitan saber, la instalación del Cliente de Oracle:

Paso 1:  Descarguen los archivos "Basic All Files" y "SQL*Plus" de la página de descargas:



Paso 2: Una vez descargados los archivos Descomprimimos los *.zip a modo que queden todos los archivos en la misma carpeta.

Paso 3: Creamos un directorio en el Disco C: y le asignamos el nombre Oracle.



Paso 4: Creamos las variables de entorno.

Para este paso seleccionen Equipo (Windows+ E abre el explorador de Windows), seleccionan Equipo y luego Propiedades del Sistema. En la barra lateral izquierda aparecen algunos links, seleccionen el que dice "Configuración avanzada del Equipo".



Luego damos clic en el botón "Variables de Entorno".


Tenemos que configurar 1 variable de entorno y crear 2 adicionales:
  • La primer es la variable PATH, al valor de la variable agregar al final ';C:\Oracle\instantclient_11_2' (sin las comillas) y Aceptar.
  • La segunda variable hay que crearla y denominarla SQL_PATH, en el valor de la variable agregar la ruta donde se encuentran los archivos del cliente de Oracle 'C:\Oracle\instantclient_11_2' (sin las comillas).
  • La tercera variable hay que crearla y denominarla TNS_ADMIN en el valor de la variable agregar la ruta donde se encuentran los archivos del cliente de Oracle 'C:\Oracle\instantclient_11_2' (sin las comillas). Este es el directorio donde estara el archivo TNSNAMES.ora.



Creación del TNSNAMES.ora
Con estos pasos ya tenemos instalado nuestro cliente y cuando reiniciemos funcionará, pero necesitamos crear el archivo de TNSNAMES para poder conectarnos a alguna base de datos.

Abrimos Notepad y creamos un nuevo archivo que guardaremos con extensión *.ora y lo denominaremos TNSNAMES, por cuestiones prácticas lo guardaremos en el directorio raíz que debe coincidir con el directorio de la variable de entorno TNS_ADMIN.

Creado el archivo, procedemos a su respectiva configuración:

AquiColocarAliasConexion =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = AquiColocarNombreHost)(PORT = 1521))
   )
   (CONNECT_DATA =
     (SID = AquiColocarSID)
     (SERVER = DEDICATED)
   )
 )

Este sería un bloque del TNSNAMEs, con el cual podríamos conectarnos a una base de datos sustituyendo los valores en Negrita por valores que correspondan a un servidor de Bases de Datos:

AquiColocarAliasConexion = Cualquier nombre, de preferencia que represente alguna característica propia de la conexión, ejemplo SERVER01.

AquiColocarNombreHost = Nombre o IP del Servidor donde esta la base de datos.

AquiColocarSID = Nombre del SID probablemente del SERVICE de la base de datos, para las bases de datos Express Edition por lo general es XE.

Guardamos los cambios y con esto deberíamos tener configurada nuestra conexión utilizando el Instant Client de Oracle.

Paso 5: Reinicien el equipo.

Paso 6: Prueben.
Solamente como prueba intentaré conectarme a mi servidor de Bases de Datos, que en este caso esta dentro de una máquina Virtual que utiliza como Base de Datos Oracle XE 10 G.

Abren un CMD (Windows + R : Menu Ejecutar, Digiten CMD y luego Enter), cuando tengan la pantalla negra digiten el comando SQLPLUS. Esto debe invocar al programa SQLPLUS que en los pasos anteriores descomprimimos en la misma carpeta del cliente.



Pedirá el UserName de la Base de Datos de Oracle a la que nos conectaremos, importante tener credenciales para ingresar a la base. Un punto a tomar en cuenta es que necesitaremos digitar algo similar a esto para poder conectarnos:

NombreUsuario/Contraseña@AliasBaseDatosTNSNames

Esto en el campo de User.

Supongamos que nuestras credenciales son las siguientes:

NombreUsuario = BetaRoot
Contraseña = BetaRootSV
AliasBaseDatosTNSNames = BetaORA01

Digitaríamos lo siguiente:

BetaRoot/BetaRootSV@BetaORA01


Si las credenciales son válidas entonces deberá mostrarnos como Conectados a la Base de Datos.


Y allí pueden ejecutar sus comandos SQL libremente, pueden utilizar un Administrador de Base de Dato par a Oracle que se conecte mediante el uso de TNSNAMES, como recomendación el SQLDeveloper si quieren algo bueno y gratuito.

¿Dudas?

martes, 29 de enero de 2013

ASP .Net Tutorial SQLConnection y SqlCommand (VB)



Descargar Código Fuente:



Nota:
Modificar el archivo web.config de acuerdo a la forma en que se va a conectar a la base, en el tutorial se detalla un poco sobre este punto.

Pre-requisitos para el Tutorial:

  • Visual Studio 2008 (Podría funcionar en 2005 y 2010).
  • Haber configurado previamente la base de datos de SQL Server en algún equipo que funja como servidor o localmente.
  • Este tutorial utiliza la versión 2005 de SQL Server.
  • Tener instalado el SQL Server Management Studio.
  • Tener permisos para creación de tablas en la base de datos a utilizar.


Creación de altas, Bajas y modificaciones usando SQLConnection y SQLCommand.

Creación de la Base de Datos.

Abrimos el SQL Server Management Studio e ingresamos. Creamos la base de datos, en este caso se llama “prueba” en ella crearemos una tabla de llamada “usuario”. La base debe tener los siguientes campos:

Nombre Varchar(30) Llave Primaria.
Clave Varchar(30)
Mail Varchar(30)





Creación del sitio web y la plantilla.

Creamos el Sitio Web, lo llamaremos ManttoSimple.


Eso creará el árbol de archivos del Sitio Web.



Creamos la MasterPage para el proyecto, sino sabe cómo crearla le recomiendo que lea el Tutorial de MasterPages: Aqui

Le colocamos de nombre “MainPage.aspx”



Y la MasterPage trae el código por defecto siguiente:

 <%@ Master Language="VB" CodeFile="MainPage.master.vb" Inherits="MainPage" %>  
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
 <html xmlns="http://www.w3.org/1999/xhtml">  
 <head runat="server">  
   <title></title>  
   <asp:ContentPlaceHolder id="head" runat="server">  
   </asp:ContentPlaceHolder>  
 </head>  
 <body>  
   <form id="form1" runat="server">  
   <div>  
     <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">  
     </asp:ContentPlaceHolder>  
   </div>  
   </form>  
 </body>  
 </html>  


Creada la MasterPage vamos a crear un Hoja de Estilos la cual la nombraremos como “StyleMP.css”.


Utilizaremos el mismo código CSS que utilizamos en el tutorial anterior, de manera que vamos a sustituir el código que existe actualmente en StyleMP.css por lo siguiente:

 body {   
    margin: 0;   
    padding-bottom: 2em;   
    background-color: #FFFFFF;   
    color: #000000;   
    font-family: Verdana, Arial, Helvetica, sans-serif;   
    border-top: 2px solid #B51032;   
  }   
  /* Header Section */   
  #header {   
    border-top: 3px solid #B51032;   
    border-bottom: 1px dotted #B51032;   
    height: 3em;   
  }   
  #header .title {   
    font: 190% Arial, Helvetica, Georgia, "Times New Roman", Times, serif;   
    color: black;   
    background-color: transparent;   
    float: left;   
    margin-right: 2em;   
    margin-top: 0.3em;   
    margin-left: .8em;   
  }   
  #header a:link, a:visited {   
    color: #B51032;   
  }   
  /* Navigation */   
  #navigation {   
    width: 200px;   
    top: 5em;   
    left: 1em;   
    width: 13em;      
    position:absolute;   
    font-family: Verdana, Arial, Helvetica, sans-serif;   
    font-size:90%;   
  }   
  #navigation ul {   
    list-style: none;   
    margin: 0;   
    padding: 0;   
  }   
  #navigation li {   
    border-bottom: 1px solid #ED9F9F;   
  }   
  #navigation li a {   
    display: block;   
    padding: 5px 5px 5px 0.5em;   
    border-left: 12px solid #711515;   
    border-right: 1px solid #711515;   
    background-color: #B51032;   
    color: #FFFFFF;   
    text-decoration: none;   
  }   
  #navigation li a:hover {   
    background-color: #711515;   
    color: #FFFFFF;   
  }   
  #navigation ul ul {   
    margin-left: 12px;   
  }   
  #navigation ul ul li {   
    border-bottom: 1px solid #711515;   
    margin:0;   
    background-color: #ED9F9F;   
    color: #711515;   
  }   
  #navigation ul ul a:link, #navigation ul ul a:visited {   
    background-color: #ED9F9F;   
    color: #711515;   
  }   
  #navigation ul ul a:hover {   
    background-color: #711515;   
    color: #FFFFFF;   
  }   
  #header .breadcrumb {   
    font: 90% Arial, Helvetica, Georgia, "Times New Roman", Times, serif;   
    color: black;   
    background-color: transparent;   
    float: right;   
    margin-right: 2em;   
    margin-top: 0.8em;   
    font-weight:bold;   
  }   
  /* Main Content */   
  #content    
  {   
    margin-top:1em;   
    margin-left: 16em;   
    margin-right: 2em;   
  }   
  h1 {   
    font: 150% Arial, Helvetica, Georgia, "Times New Roman", Times, serif;   
  }   
  #content p {   
    font-size: 80%;   
    line-height: 1.6em;    
  }   
  #content ul {   
    font-size: 80%;   
    line-height: 1.6em;    
  }  

Ahora, ya con el CSS procedemos a sustituir el código de la MasterPage y utilizaremos el siguiente:

 <%@ Master Language="VB" CodeFile="MainPage.master.vb" Inherits="MainPage" %>  
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  <html xmlns="http://www.w3.org/1999/xhtml" >   
  <head id="Head1" runat="server">   
  <title>La Aplicación Web</title>   
  <link href="StyleMP.css" rel="stylesheet" type="text/css" />   
  </head>   
  <body>   
  <div id="wrapper">   
  <form id="form1" runat="server">   
  <div id="header">   
  <span class="title">Tutorial de Mantenimiento</span>   
  </div>   
  <div id="content">   
  <asp:contentplaceholder id="MainContent" runat="server">   
  <!-- El contenido específico de la página puede ir acá... -->   
  </asp:contentplaceholder>   
  </div>   
  <div id="navigation">   
  Aquí podría haber un menú.   
  </div>   
  </form>   
  </div>   
  </body>   
  </html>   

Una vez lista la creación de la MasterPage procedemos a crear las páginas de contenido.

Creación de Páginas de Contenido.

Crearemos una nueva página “default.aspx”, sustituyendo la ya existente, recordar ponerle la opción Seleccionar la página principal.


La página “default.aspx” solamente tendrá los hipervínculos al resto de páginas:

  • Alta de usuarios.
  • Baja de usuarios.
  • Consulta de usuarios.
  • Modificación de usuarios.

Para ello crearemos 4 objetos hyperlink del Cuadro de herramientas:


Y los colocaremos en el lienzo en modo diseño, modificaremos la propiedad Text de cada uno y colocaremos el siguiente texto en orden:
  • Alta de Usuarios
  • Consulta de Usuarios
  • Baja de Usuarios
  • Modificación de Usuarios


    Creamos las 4 páginas de contenido, las asociamos con la MasterPage (chequear la opción Seleccionar la página principal) y les colocaremos los siguientes nombres:

    altausuario.aspx
    consultausuario.aspx
    bajausuario.aspx
    modificacionusuario.aspx

    Cuando las páginas de contenido han sido creadas, procedemos a enlazar cada uno de los hipervínculos de la página “default.aspx” con su respectiva página de enlace. Para lograr esto accedemos a la propiedad Navigate URL.


    Definición de la cadena de conexión.
    Para conectarse a la base de datos que creamos utilizaremos el archivo web.config, el cual nos permitirá definir la cadena de conexión que será utilizada en el proyecto para hacer consultas SQL a la base de datos.
    Buscamos el apartado donde se muestra lo siguiente:

     <appSettings/>  
       <connectionStrings/>  
       <system.web>  
    

    Entonces sustituímos <connectionStrings/>

    Si nuestra base de Datos esta en el mismo equipo donde estamos programando la aplicación entonces agregamos lo siguiente:


     <connectionStrings>  
     <add name="prueba"  
     connectionString="Data Source=(local);Initial Catalog=prueba;Integrated Security=SSPI;"/>  
     </connectionStrings>  
    

    Si no es así y se encuentra en un servidor remoto de la red o a través de un túnel VPN:

     <!-- Abrimos la cadena de conexion-->  
     <connectionStrings>  
     <add name="prueba" connectionString="Data Source=Nombre/IpServidor;User ID=UsuarioBaseDatos;Password=ContraseñaBaseDatos" providerName="System.Data.SqlClient"/>  
     </connectionStrings>  
     <!--Cerramos la cadena de conexion-->  
    

    En donde:
    Nombre/IPServidor: Será el nombre o la dirección IP del Servidor donde está configurada la Base de Datos.
    UsuarioBaseDatos: Es el usuario con el que podemos ingresar a la base de datos que hemos configurado en SQLServer.
    ContraseñaBaseDatos: Es la contraseña con la que podemos ingresar a la base de datos que hemos configurado en SQLServer.

    Hay diferentes situaciones que pueden presentarse al momento de configurar el String, si se ha pedido que la contraseña sea con autentificación de Windows o a través de un Servicio LDAP llámese Active Directory, etc. De todas maneras recomiendo que vean el siguiente sitio donde muestra varias formas de acceder a los distintos gestores de bases de datos: Aqui

    Este tutorial se he hecho pensando en un servidor externo, por lo que utilizaré la segunda opción que intento explicar acá.

    Codificando la aplicación.
    Inserción.

    Y comenzamos la parte entretenida del desarrollo: la programada. Abrimos la página altausuario.aspx en modo diseño y añadimos los siguientes objetos:

    • 4 Labels
    • 3 TextBox
    • 1 Button
    • 1 HyperLink
    El HyperLink debe apuntar a la página “default.aspx” como un retorno al menú principal. Recordar que para que apunte a esa página hay que modificar la propiedad NavigateURL.

    Vamos a modificar el control TextBox donde pide la clave, y le colocaremos a la propiedad TextMode el valor “Password”, los otros TextBox tienen que tener el valor como SingleLine.

    Queda a criterio del programador dejar los elementos con los nombres actuales o colocarles nombres más adecuados utilizando siempre las convenciones de programación para nombrar a los objetos generalmente aceptados para mayor entendimiento. Esto dependerá de la elegancia con la que se quiera programar, no interfiere en el resultado.

    El formulario deberá quedar de la siguiente manera:


    El siguiente paso a dar es codificar el evento clic del botón, dando doble clic el botón de Alta, será posible ver el editor de código y aparecerá algo similar a lo siguiente:

     Partial Class altausuario  
       Inherits System.Web.UI.Page  
       Protected Sub btnAgregar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAgregar.Click  
       End Sub  
     End Class  
    

    Lo primero será hacer una improtación de la clase SqlClient del Namespace System.Data, estó en la parte General del Editor de código:

    Imports System.Data.SqlClient

    Ahora agregaremos código dentro del evento clic del botón:

     Protected Sub btnAgregar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAgregar.Click  
         Try  
           'Declaracion de Variables  
           Dim vNombre As String = Me.txtNombre.Text  
           Dim vClave As String = Me.txtClave.Text  
           Dim vEmail As String = Me.txtEmail.Text  
           Dim SqlString As String = ConfigurationManager.ConnectionStrings("prueba").ConnectionString  
           Dim conexion As New SqlConnection(SqlString)  
           'Abre la conexion  
           conexion.Open()  
           'Creación del objeto con los datos cargados para el Comando SQL  
           Dim comando As New SqlCommand("INSERT INTO USUARIO(Nombre, Clave, Email) VALUES('" _  
           & vNombre & "','" & vClave & "','" _  
           & vEmail & "')", conexion)  
           'Ejecuta el Comando SQL  
           comando.ExecuteNonQuery()  
           'Mensaje Si es exitoso  
           Me.lblMessage.Text = "Se registró el Usuario " & vNombre  
           'Cierra la conexión  
           conexion.Close()  
           'Limpia los TextBox, tras añadir el Usuario  
           Me.txtNombre.Text = ""  
           Me.txtClave.Text = ""  
           Me.txtEmail.Text = ""  
           'Captura del error en caso de producirse  
         Catch ex As SqlException  
           Me.lblMessage.Text = ex.Message  
         End Try  
       End Sub  
    


    Con esto debe ser posible Insertar datos desde el Formulario hacia la Base de Datos:

     




    Con esto completamos la creación de usuarios. Lo siguiente será consultar los usuarios que hemos creado.

    Consulta.
    Para la consulta abrimos el formulario “consultausaurio.aspx” y agregamos los siguientes elementos:
    • 2 Labels
    • 1 TextBox
    • 1 Botón
    • 1 HyperLink
    Los organizamos de manera que se vean como el siguiente:


    Una vez mas en el código General importamos la clase SqlClient:
     Imports System.Data.SqlClient  
    
    Y procedemos a codificar su funcionalidad en el evento clic del botón:

     Protected Sub btnBuscar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBuscar.Click  
         Try  
           'Declaración de variables  
           Dim vNombre As String = Me.txtBusqueda.Text  
           Dim SqlString As String = ConfigurationManager.ConnectionStrings("prueba").ConnectionString  
           Dim conexion As New SqlConnection(SqlString)  
           'Abrimos la conexión  
           conexion.Open()  
           'Creación del objeto con los datos cargados para el Comando SQL  
           Dim comando As New SqlCommand("SELECT Nombre, Clave, Email FROM USUARIO " _  
                         & "WHERE Nombre ='" & vNombre & "'", conexion)  
           'Creación de objeto SqlDataReader e inicialización mediante ExecuteReader  
           Dim registro As SqlDataReader = comando.ExecuteReader  
           'Validación de registro coincidente  
           If registro.Read Then  
             Me.lblMessage.Text = "Clave: " & registro("clave") & "<br>" _  
             & "Mail: " & registro("email")  
           Else  
             Me.lblMessage.Text = "No existe usuario con nombre" & vNombre  
           End If  
         Catch ex As SqlException  
           Me.lblMessage.Text = ex.Message  
         End Try  
       End SubImports System.Data.SqlClient  
    

    Ahora, la consulta debe estar en funcionamiento:



    Eliminación.
    Tenemos las Altas y las Consultas ahora crearemos la interfaz para la Eliminación. Para ello crearemos un Formulario similar al de la consulta, con la diferencia que en el botón de búsqueda se leera eliminar.


    Ahora codificamos el evento clic del botón Borrar:

     Protected Sub btnBorrar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBorrar.Click  
         Try  
           'Declaraciones  
           Dim SqlString As String = ConfigurationManager.ConnectionStrings("prueba").ConnectionString  
           Dim vUsuario As String = Me.txtUsuario.Text  
           Dim conexion As New SqlConnection(SqlString)  
           'Abrimos la conexión  
           conexion.Open()  
           Dim comando As New SqlCommand("DELETE FROM USUARIO WHERE Nombre='" _  
                          & vUsuario & "'", conexion)  
           Dim cant As Integer = comando.ExecuteNonQuery  
           'Comprobación de registros encontrados  
           If cant = 1 Then  
             Me.lblMessage.Text = "Se elimino el usuario " & vUsuario  
             Me.txtUsuario.Text = ""  
           Else  
             Me.lblMessage.Text = "No existe un usuario con nombre " & vUsuario  
           End If  
           'Cerramos la conexion  
           conexion.Close()  
         Catch ex As Exception  
           Me.lblMessage.Text = ex.Message  
         End Try  
       End Sub  
    

    Y la prueba mostrará algo similar:

    Modificación.
    El último punto es la modificación, para ello crearemos un formulario con los siguientes objetos:

    Serían entonces:
    • 5 Labels
    • 3 TextBox
    • 3 Button
    • 1 HyperLink
    Ahora a codificar el botón Buscar, no olvidemos importar System.Data.SqlClient al inicio, en la parte general. Para la Modificación merecemos esforzarnos un poco más porque ya aprendimos a usar la herramienta en los formularios anteriores. El Código Completo quedaría así:

     Imports System.Data.SqlClient  
     Partial Class modificacionusuario  
       Inherits System.Web.UI.Page  
       Protected Sub btnBuscar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBuscar.Click  
         Try  
           Dim vNombre As String = Me.txtNombre.Text  
           Dim SqlString As String = ConfigurationManager.ConnectionStrings("prueba").ConnectionString  
           Dim conexion As New SqlConnection(SqlString)  
           'Lmpiamos las Cajas de Mensaje  
           Me.lblMsgUno.Text = ""  
           Me.lblMsgDos.Text = ""  
           conexion.Open()  
           Dim comando As New SqlCommand("SELECT Nombre, Clave, Email FROM USUARIO " _  
                          & "WHERE Nombre ='" & vNombre & "'", conexion)  
           Dim registro As SqlDataReader = comando.ExecuteReader  
           If registro.Read Then  
             Me.txtClave.Text = registro("clave")  
             Me.txtEmail.Text = registro("Email")  
             'Deshabilitamos el TextBox del Nombre para evitar que los datos de un usuario  
             'se inyecten en otro usuario  
             Me.txtNombre.Enabled = False  
             'Habilitamos el botón de nueva consulta para permitir realizar una nueva consulta  
             Me.btnConsulta.Enabled = True  
           Else  
             Me.lblMsgUno.Text = "No existe registro para ese usuario"  
           End If  
         Catch ex As SqlException  
           Me.lblMsgUno.Text = ex.Message  
         End Try  
       End Sub  
       Protected Sub btnModificar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnModificar.Click  
         Try  
           Dim SqlString As String = ConfigurationManager.ConnectionStrings("prueba").ConnectionString  
           Dim conexion As New SqlConnection(SqlString)  
           Dim vNombre As String = Me.txtNombre.Text  
           Dim vClave As String = Me.txtClave.Text  
           Dim vEmail As String = Me.txtEmail.Text  
           conexion.Open()  
           Dim comando As New SqlCommand("UPDATE USUARIO SET " & _  
                           "Clave='" & vClave & "' ," & _  
                           "Email='" & vEmail & "'" & _  
                           "WHERE Nombre='" & vNombre & "'", conexion)  
           Dim cant As Integer = comando.ExecuteNonQuery()  
           If cant = 1 Then  
             Me.lblMsgDos.Text = "Datos Modificados"  
           Else  
             Me.lblMsgDos.Text = "No existe el Usuario"  
           End If  
           conexion.Close()  
         Catch ex As SqlException  
           Me.lblMsgDos.Text = ex.Message  
         End Try  
       End Sub  
       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  
         Me.btnConsulta.Enabled = False  
       End Sub  
       Protected Sub btnConsulta_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnConsulta.Click  
         'Limpia los campos  
         Me.txtClave.Text = ""  
         Me.txtEmail.Text = ""  
         Me.txtNombre.Text = ""  
         'Permite ingresar un nuevo Nombre a Consulta  
         Me.txtNombre.Enabled = True  
       End Sub  
     End Class  
    

    Y ahora solo queda probarlo:




    Mas adelante iremos modificando esta misma aplicación con detalles mas profesionales, pero por el momento tenemos con esto para crear un Mantenimiento Sencillo.

    Si se me quedo algún punto, ejemplo el HyperLink de retorno de la pantalla de Borrar espero posteriormente ir subiendo los ejemplos con su respectivo código para que los descarguen y eso incluye los que ya están hechos (inclyendo este). Terminamos este Tutorial, si les gusta están los botones sociales para darle más publicidad al blog.

    Fuente:
    ASP .NET Ya