[ Foro de C# ]

Programación en 3 capas. referencia a objeto no establecida como instancia de un objeto.

09-Feb-2017 23:37
Jonathan Josue Cisneros Vinueza
0 Respuestas

muy buenas, estoy realizando un deber de la universidad, el programa me muestra este error
referencia a objeto no establecida como instancia de un objeto.
estoy programando en 3 capas
Revise el código con los breakpoints, y al parecer cuando envió el valor de la cadena de conexión de la capa datos a la capa negocio... el valor que recibe es null, entonces al momento de abrir la conexión me da esta exepcion. añado codigo fuente esero puedan darme una mano.

//capa negocio
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;  //libreria ado.net
using System.Data.OleDb; //libreria ado.net


namespace CapaDatos
{
   public class ClsConexion
   {
       //variable privada para establecer conexxion a la base de datos
       private OleDbConnection cnn;

       //metodo constructor
       public ClsConexion()
       {
           //inicializamos el string de conexcion
           OleDbConnection cnn =new OleDbConnection ("Provider = SQLNCLI11; Data Source = PC - JOSUE; Integrated Security = SSPI; Initial Catalog = Roles");
       }

       //Propiedad para manipular la variable privada cnn
       public OleDbConnection Conexion
       {
           get { return cnn; }
           set {cnn=value; }
       
       }
   }
}

//capa negocio
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data; //Ado.net
using System.Data.OleDb; //Ado.net
using CapaDatos;    //importando libreria capa de Datos

namespace CapaNegocioRoles
{
   public class Empleado
   {
       private string _Numero_empleado;
       private string _Nombre_empleado;
       private float _Sueldo_final = 0;
       private int CodError = 0;
       private string MsgError = "";


       //Metodo constructor
       public Empleado()
       {//Inicio
           _Numero_empleado ="";
           _Nombre_empleado  ="";
           _Sueldo_final =0;
       }//Fin

       public int pCodError
       {
           get { return CodError; }
           set { CodError = value; }
       }

       public string pMsgError
       {
           get { return MsgError; }
           set { MsgError = value; }
       }

       public string Numero_empleado
       {
           get { return _Numero_empleado;}
           set { _Numero_empleado = value;}
       }

       public string Nombre_empleado
       {
           get { return _Nombre_empleado; }
           set { _Nombre_empleado = value; }
       }

       public float Sueldo_final
       {
           get { return _Sueldo_final; }
           set { _Sueldo_final = value; }
       }

       //Adiciona valores al sueldo
       public float Sumar_sueldo(float valor)
       {
           _Sueldo_final += valor;
           return _Sueldo_final;
       }

       //Resta valores al sueldo
       public float Restar_sueldo(float valor)
       {
           _Sueldo_final += valor;
           return _Sueldo_final;
       }


       //Calcula Hora Extra
       public float Calcula_hora_extra(float valor, float cantidad)
       {
           Sumar_sueldo(valor* cantidad);
           return _Sueldo_final;
       }

       public Boolean GuardarDatos()
       {
           ClsConexion objCnn = new ClsConexion();
           OleDbCommand objCmd = new OleDbCommand();
           OleDbParameter objPrm = new OleDbParameter();

           try
           {
               CodError = 0;
               MsgError = "";
               objCnn.Conexion.Open();
               objCmd.Connection = objCnn.Conexion;
               objCmd.CommandType = CommandType.StoredProcedure;
               objCmd.CommandText = "sp_IngresosDatos";

              //num de empleado
               objPrm = new OleDbParameter("@Num_Empleado", OleDbType.VarChar, 10);
               objPrm.Direction = ParameterDirection.Input;
               objPrm.Value = _Numero_empleado;
               objCmd.Parameters.Add(objPrm);

               //nombre de empleado
               objPrm = new OleDbParameter("@Nombre_Empleado", OleDbType.VarChar, 255);
               objPrm.Direction = ParameterDirection.Input;
               objPrm.Value = _Nombre_empleado;
               objCmd.Parameters.Add(objPrm);

               //sueldo del empleado
               objPrm = new OleDbParameter("@Sueldo", OleDbType.Decimal, 2);
               objPrm.Direction = ParameterDirection.Input;
               objPrm.Value = _Sueldo_final;
               objCmd.Parameters.Add(objPrm);

               objCmd.ExecuteNonQuery();
               objCmd.Dispose();
               objCnn.Conexion.Close();
           }
           catch (Exception ex)
           {
               CodError = -100;
               MsgError = ex.Message;
           }

           return true;
       }



   }

}

// form 1 por ciacaso

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data; //Ado.net
using System.Data.OleDb; //Ado.net
using CapaNegocioRoles; //Importando la libreria de negocio


namespace ProyectoRoles
{
   public partial class Form1 : Form
   {
       //Declaracion del objeto_empleado a partir
       //de la clase empleado
       Empleado ObjetoEmpleado = new Empleado();
       public Form1()
       {
           InitializeComponent();
       }

       private void BtnCalcular_Click(object sender, EventArgs e)
       {
           ObjetoEmpleado.Nombre_empleado = this.TxtNombreEmpleado.Text;
           ObjetoEmpleado.Numero_empleado = this.TxtNumeroEmpleado.Text;
           ObjetoEmpleado.Sumar_sueldo(float.Parse(this.TxtSueldo.Text));
           ObjetoEmpleado.Sumar_sueldo(float.Parse(this.TxtBonos.Text));
           ObjetoEmpleado.Restar_sueldo(float.Parse(this.TxtMultas.Text));
           ObjetoEmpleado.Restar_sueldo(float.Parse(this.TxtDescuentos.Text));
           ObjetoEmpleado.Calcula_hora_extra(float.Parse(this.TxtValorHorasExtras.Text), float.Parse(this.TxtNumHorasExtras.Text));
           this.TxtSueldoFinal.Text = ObjetoEmpleado.Sueldo_final.ToString();
           ObjetoEmpleado.GuardarDatos();
           if (ObjetoEmpleado.pCodError == 0)
           {
               MessageBox.Show("Registro ingresados correctamente","OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
           }else
           {
               MessageBox.Show("Fallo en el registro. " + ObjetoEmpleado.pMsgError, "Error" , MessageBoxButtons.OK, MessageBoxIcon.Error);
           }



       }
   }
}

Agradecería su pronta respuesta




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)