pu

Buscar este blog

miércoles, 25 de marzo de 2015

.NET y ORACLE

En esta ocasión desarrollaremos un aplicativo sencillo, el cuál nos permita lograr conectar una base de datos ORACLE desde .NET, más precisamente la base de datos Oracle Express Edition.
1-) Descargar e instalar dicho motor de bases de datos aquí.
2-) En este caso veamos este ejemplo como un HelloWorld :D, por lo tanto vamos a activar un “esquema” de la base de datos, sobre el cual trabajaremos a lo largo de este post. Entonces vamos a trabajar con el esquema HR, muy conocido en el mundo de ORACLE como un starter schema, demo o como se le quiera llamar.
Para poder activar el esquema debemos seguir los siguientes pasos:
a-) Después de instalar el paquete abrimos el menú y seleccionamos la carpeta de Oracle Ex. Y abrimos la Consola de comandos.
b-) Bien ahora veamos la siguiente imagen, para ver una de las formas en que podemos lograr  la activación del esquema HR. Cuando se requiera el password de system, deberías digitar el password que ingresaste en el proceso de instalación de Oracle Express Edition.
3-) Luego de haber activado y realizado los pasos anteriores procedemos a armar la cadena de conexión. Veamos el siguiente link, allí se demuestran varias formas posibles para armar una cadena de conexión en .net para oracle, una de estas es buscar en el archivo  tnsnames.ora(El archivo se puede abrir con el notepad), en el que reciden las cadenas por default que instala la instancia de OracleEXE, veamos la imagen.
Al abrir con notepad dicho archivo. en la imagen la sección más importante a tener en cuenta es:
Photobucket
En rojo, lo que será la cadena de conexión en nuestro Web.Config o App.Config, así:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="ConnectionStringUsers" connectionString="
         Data Source=
         (DESCRIPTION =
          (ADDRESS=(PROTOCOL = TCP)(HOST=Fsotelo-PC)(PORT=1521))
          (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME=XE))
         );
         User Id={0};Password={1};"/>
  </connectionStrings>
</configuration>
Tengamos en cuenta que dejamos dos variables de contenido en la cadena para setear dinámicamente desde la aplicación.
4-) Luego de tener completados cada uno de estos pasos, me resta hacer entrega de una micro capa de datos creada para obtener datos con .NET Framework.
a-) Capa de acceso a datos, Connection encargado de recuperar la cadena de conexión para el ejemplo, seguramente habrá formas técnicas de optimizar este código, que permite obtener el ConnectionString, pero esto desborda el enfoque del presente post. Recordemos agregar el namespace Oracle.DataAccess.Client, que contiene lo necesario para el trabajo con datos provenientes de Oracle.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using System.Configuration;
 
namespace DAL
{
    public class Connection
    {
        private string password, user;
 
        public Connection()
        { }
        ///
<summary> /// Permite crear una cadena de conexión tipo Oracle
 /// </summary>
        ///
        public OracleConnection Connect()
        {
            ////////////////////////////////////////////////////////////////////////////////////
            //Referencia estática al usuario y password ingresados en el login de la aplicación/
            ////////////////////////////////////////////////////////////////////////////////////
            user = GlobalIdentity.Instance.User;
            password = GlobalIdentity.Instance.Password;
 
            if (string.IsNullOrEmpty(user) || string.IsNullOrEmpty(password))
                throw new Exception("El usuario y el password son datos requeridos");
 
            string oradb = ConfigurationManager.
ConnectionStrings["ConnectionStringUsers"].ConnectionString;
            oradb = string.Format(oradb, user, password);
            OracleConnection conn = new OracleConnection();
            conn.ConnectionString = oradb;
            return conn;
        }
    }
}
Como se ve, tenemos una instancia estática GlobalIdentity, la cual se crea a partir del patrón de diseño SINGLETON para poder hacer referencia de forma global a un usuario y su respectivo password.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace DAL
{
    ///
<summary> /// Aplicamos el patrón de diseño singleton
 /// para tener una instancia global de usuario
 /// y password en nuestra aplicación.
 /// </summary>
    public class GlobalIdentity
    {
        private static readonly GlobalIdentity _GlobalIdentity = new GlobalIdentity();
        public string User { get; set; }
        public string Password { get; set; }
        private  GlobalIdentity(){
 
        }
        public static GlobalIdentity Instance
        {
            get{
                return _GlobalIdentity;
            }
        }
    }
}
En el siguiente fragmente podemos ver entre muchas una forma posible de impactar bases de datos tipo oracle
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using System.Data;
 
namespace DAL
{
    public class Departments
    {
        public Departments() { }
        ///
<summary> /// Selecciona todos los departamentos de HR
 /// </summary>
        /// DataTable
        public DataTable GetAllDepartments()
        {
            Connection c = new Connection();
 
            using (OracleConnection conn = c.Connect())
            {
                List LDptos = new List();
                string sqlQuery = "select * from departments";
                OracleCommand cmd = new OracleCommand(sqlQuery, conn);
                cmd.CommandType = CommandType.Text;
                DataTable dt = new DataTable();
                OracleDataAdapter da = new OracleDataAdapter(cmd);
                try
                {
                    conn.Open();
                    da.Fill(dt);
                    return dt;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
}
En el siguiente fragmento vemos los procesos necesarios para vincular los datos con un DataGridView utilizado para la Demo
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Oracle.DataAccess.Client;
using DAL;
 
namespace WForms_ORACLE1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Load += new EventHandler(Form1_Load);
        }
 
        void Form1_Load(object sender, EventArgs e)
        {
            Departments departamentos = new Departments();
            DataTable misDptos = new DataTable();
            try
            {
               misDptos = departamentos.GetAllDepartments();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                this.Close();
            }
 
            dataGridView1.DataSource = misDptos;
        }
    }
}
Veamos la imagen de este formulario en vista diseño.
Por último veamos lo que sería la interfaz de login del usuario. El cual no se propone como modelo a seguir, solo para efectos prácticos del ejemplo, debido a la falta de un algoritmo de cifrado de datos.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL;
 
namespace WForms_ORACLE1
{
    public partial class LogIn : Form
    {
        public LogIn()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
             //Creación de instancias estáticas para el user y password
            GlobalIdentity.Instance.User = textBox1.Text;
            GlobalIdentity.Instance.Password = textBox2.Text;
            Form1 fData = new Form1();
            fData.Show();
        }
    }
}
Veamos la imagen:
Así luciría:
tags
"Punto net con oracle", ".net y oracle", "Conectar .net con Oracle"
Por último un saludo, y feliz coding!

martes, 20 de enero de 2015

Resumen Quinto Semestre, Parte III


Taller de sistemas operativos 2 Profe: González Pauzoca Claudio Daniel
La asignatura difícil ya que instalar maquinas virtuales se trata y yo que tenía un notebook de mierda la sufrí, pero siempre digno entregando los trabajos a tiempo y cumpliendo con los tiempos. El ramo requiere que tengas un buenísimo computador ya que las instalaciones ocupan mucho recurso y debes en algunas ocasiones mantener al menos 3 maquinas virtuales de Windows 2008 server cuek… costo pero salió. Aprobé el ramo con un 5.3 el profe siempre te da una clase mas para la entrega pero no confiarse de la bondad en general el profe es seco y enseña muy bien le cargo la bip… con el teléfono. Jajajaj

Ingeniería de Requerimientos Profe: Bunster Oliva Karina De Los Angeles
La profe un amor, morena, trabaja en LAN,es soltera, la amooooooooooooo kapita… baila pooldance me agrego a facebook “no a todos los agrega” comenta toda su vida pero vamos a enfocarnos a la asignatura. Ayaaaaa le cargo bip con el teléfono…. J

Pasa la clase,,,,,,,,,,, ella te hace un resumen,,,,, prueba,,,,, así me saque muy buenas notas, igual hay que estudiar mucho para aprender las cosas de memoria y si lo haces te ira muy bien en las pruebas los trabajos que realiza o los informes que hay que realizar son de una clase para la otra lo que sirve mucho para subir las notas al final del ramo.- lo que rescato que se llevo a trabajar con ella a varios alumnos asi que buena, yo le ofrecí mi dirriculum pero me hizo la finta que ya estabas despidiendo personas por la fusión con latam


Resumen Quinto Semestre, Parte II


Procesos de Negocio Profe: Morris Arredondo Jorge
El ramo fue relajado lo importante de este que hay que trabajar en clase que el profe vea que estas pensando preguntando ya que este ramo se ve mucho en el ámbito laboral.
Las pruebas se hicieron en clases resolviendo problemas de distintas empresas y modelos de negocios ya antes vistos por el profesor, al hombre le molesta que faltes a clase y que no te conosca, le gusta trabajar con “bonita soft” los trabajos entrégaselos con el nombre tuvo en el archivo y en formato jpg ya que el nunca instalo bonita soft. Ahhh ocupa Excel para comprender los ejercicios.

Contabilidad Profe: Perez Opazo Abelardo Mauricio

Este ramo lo asegure al principio con los temas teóricos con notas arriba de 6.5 se puede estudiando lo realice, segunda nota totalmente de practica contable y es necesario realizar muchos ejercicios para que te vaya bien, aquí en la segunda nota me saque un 6.4 estuvo relajado, la tercera nota fue la prueba N la que me saque un 5 ya que no estudie mucho ya que estaba concentrado en ing software que me ocupo mucho tiempo. Ultima nota me saque un 7 y pase relajado el ramo. Recomendaciones ir todas las clases hacer todos los ejercicios y no será muy traumático.


ver parte 1 

Resumen Quinto Semestre, Parte I


Wuaaa esperando que lo hayan pasado super en este final de año esperamos que este 2015 sea el mejor de los años, yyyy bueno hago el respectivo resumen de mi  5 semestre en el Inacap Santiago Sur… no lo lean…
Juaaaaaaa, lejos para mí el más difícil ya que fue cargados en informes trabajos grupales y disertaciones los que para mi eran complicados en realizar por la pega y pitutos que salieron durante el semestre empecemos.


Ingles V,  profe Jonas Castro
Este ramo me costó más que la shiet ya que no se si en otros post dije que soy negado en engleish jajajaja.. el profe enseña muy bien pero al principio nos tapo en guias fotocopias del ingles tipo cambrish como que no era del libro que entregan en la u, bueno por esto baje mucho las notas los que a final de semestre me jugo mucho en contra. Abordamos las guias de business charlas, dar datos como llegar a lugares repasamos los números en cifras gigantescas, dar indicaciones en las calles, solicitar sala de reuniones, escribir emails formales, disertar y mucho liserin jajajaj.
Resumen pase con un asqueroso 4 apretado con lo justo…. No tengo mas comentarios, sobre este ramo…  la vi peluda….

Ingeniería Software Profe: Alejandro Corro

El ramo fue unos de los más difíciles 5 semestre ya que al principio todas las clases eran controles sobre documentos que se subían a la plataforma. El trabajo central del ramo consto en una seria de megas informes que había que hacer en grupo por suerte mi grupo anduvo parejito en la entrega y la disertación fue una violación… observaciones que decíamos en el documento que no estaban implementados :s bueno ahí te das cuenta de los errores. Recomendaciones no atrasarse con este ramo no tomarlo a la ligera ya que lo que se imparte se ocupa mucho en el mundo laboral, el profe un siete en la enseñanza promedio final 4… me costó más que la mierda me amanecí haciendo informes y documentación de proyectos informáticos.

Ver parte 2