Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con oracle- C#.NET

Estas en el tema de Problema con oracle- C#.NET en el foro de .NET en Foros del Web. Tengo un problema con un recupero de datos en mi aplicación :S: Lo que quiero hacer es invocar un Store Procedure desde oracle pero me ...
  #1 (permalink)  
Antiguo 14/11/2012, 12:17
Avatar de pierxo  
Fecha de Ingreso: septiembre-2012
Mensajes: 20
Antigüedad: 12 años, 2 meses
Puntos: 0
Problema con oracle- C#.NET

Tengo un problema con un recupero de datos en mi aplicación :S:
Lo que quiero hacer es invocar un Store Procedure desde oracle pero me bota error de "La conversión especificada no es válida." en la linea que esta en negrita alguien tiene alguna idea del porque?

public List<TB_Menu> mtObtnerTB_MenuPorPerfil(Int32 cnID_UsuarioPerfil)
{

List<TB_Menu> loTB_MenuLista = new List<TB_Menu>();
try
{

using (OracleConnection loConnection = new OracleConnection(attcConnectionString))
{
using (OracleCommand loCmd = loConnection.CreateCommand())
{
loCmd.CommandType = CommandType.StoredProcedure;
loCmd.CommandText = "palTB_MenuPerfilObt";
loCmd.Parameters.Add("c1", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
loCmd.Parameters.Add("VcnID_UsuarioPerfil", OracleDbType.Int32).Value = cnID_UsuarioPerfil;

loConnection.Open();



IDataReader loReader = loCmd.ExecuteReader();

while (loReader.Read())
{
TB_Menu loTB_Menu = new TB_Menu();
loTB_Menu.CnID_Menu = int.Parse(loReader["cnID_Menu"].ToString());
loTB_Menu.CnID_MenuPadre = (int?)((loReader["cnID_MenuPadre"] == DBNull.Value) ? null : loReader["cnID_MenuPadre"]);[/HIGHLIGHT][/HIGHLIGHT]
loTB_Menu.CnOrdenMenu = int.Parse(loReader["cnOrdenMenu"].ToString());
loTB_Menu.CcDescMenu = loReader["ccDescMenu"].ToString();
loTB_Menu.CcDescPrograma = loReader["ccDescPrograma"].ToString();
loTB_Menu.CdFechaCreador = (DateTime)((loReader["cdFechaCreador"] == DBNull.Value) ? DateTime.MinValue : loReader["cdFechaCreador"]);
loTB_Menu.CdFechaActualizador = (DateTime?)((loReader["cdFechaActualizador"] == DBNull.Value) ? null : loReader["cdFechaActualizador"]);
loTB_Menu.CnEstadoReg = int.Parse(loReader["cnEstadoReg"].ToString());
loTB_MenuLista.Add(loTB_Menu);



}
loReader.Close();
loReader.Dispose();


loConnection.Close();
}
}
} catch (ArgumentNullException dbex)
{
throw new System.Exception(dbex.Message);
}
//oCn.Close();
return loTB_MenuLista;

}
  #2 (permalink)  
Antiguo 14/11/2012, 17:10
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Respuesta: Problema con oracle- C#.NET

Utiliza mejor Convert.ToInt32

Código:
loTB_Menu.CnID_MenuPadre = (loReader["cnID_MenuPadre"] == DBNull.Value) ? null : Convert.ToInt32(loReader["cnID_MenuPadre"]);
Si eso no funciona pueden porque en la base de datos no esté regresando realmente un valor entero

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 16/11/2012, 08:22
Avatar de pierxo  
Fecha de Ingreso: septiembre-2012
Mensajes: 20
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema con oracle- C#.NET

Disculpa por demorar el responder si ya lo hice con en Convert y FUNCIONO! pero no hay funcionalidad :( el menu no se muestra pero ya no sale error :S
  #4 (permalink)  
Antiguo 16/11/2012, 14:05
Avatar de pierxo  
Fecha de Ingreso: septiembre-2012
Mensajes: 20
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema con oracle- C#.NET

Ya solucione el problema Gracias.
  #5 (permalink)  
Antiguo 20/11/2012, 11:41
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Respuesta: Problema con oracle- C#.NET

Cuando se resuelva el problema es bueno compartir la solución

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 27/11/2012, 10:16
Avatar de pierxo  
Fecha de Ingreso: septiembre-2012
Mensajes: 20
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema con oracle- C#.NET

El codigo quedo asi

Código C#:
Ver original
  1. public List<TB_Menu> mtObtnerTB_MenuPorPerfil(Int32 cnID_UsuarioPerfil)
  2.         {
  3.            
  4.             List<TB_Menu> loTB_MenuLista = new List<TB_Menu>();
  5.            try
  6.             {
  7.  
  8.                 using (OracleConnection loConnection = new OracleConnection(attcConnectionString))
  9.                 {
  10.                     using (OracleCommand loCmd = loConnection.CreateCommand())
  11.                     {
  12.                        
  13.                         //loCmd.Connection = loConnection;
  14.                         loCmd.CommandType = CommandType.StoredProcedure;
  15.                         loCmd.CommandText = "palTB_MenuPerfilObt";
  16.                         loCmd.Parameters.Add(new OracleParameter("c1", OracleDbType.RefCursor)).Direction = ParameterDirection.Output;
  17.                         loCmd.Parameters.Add(new OracleParameter("VcnID_UsuarioPerfil", OracleDbType.Int32)).Value = cnID_UsuarioPerfil;
  18.  
  19.                         loConnection.Open();
  20.                         IDataReader loReader = loCmd.ExecuteReader();
  21.  
  22.                         while (loReader.Read())
  23.                         {
  24.                             TB_Menu loTB_Menu = new TB_Menu();
  25.                             loTB_Menu.CnID_Menu = Convert.ToInt32(loReader["cnID_Menu"].ToString());
  26.                             loTB_Menu.CnID_MenuPadre = Convert.ToInt32((loReader["cnID_MenuPadre"] == DBNull.Value) ? null : loReader["cnID_MenuPadre"]);
  27.                             loTB_Menu.CnOrdenMenu = Convert.ToInt32(loReader["cnOrdenMenu"].ToString());
  28.                             loTB_Menu.CcDescMenu = loReader["ccDescMenu"].ToString();
  29.                             loTB_Menu.CcDescPrograma = loReader["ccDescPrograma"].ToString();
  30.                             loTB_Menu.CdFechaCreador = (DateTime)((loReader["cdFechaCreador"] == DBNull.Value) ? DateTime.MinValue : loReader["cdFechaCreador"]);
  31.                             loTB_Menu.CdFechaActualizador = (DateTime?)((loReader["cdFechaActualizador"] == DBNull.Value) ? null : loReader["cdFechaActualizador"]);
  32.                             loTB_Menu.CnEstadoReg = Convert.ToInt32(loReader["cnEstadoReg"].ToString());
  33.                             loTB_MenuLista.Add(loTB_Menu);
  34.                  
  35.  
  36.                         }
  37.                         loReader.Close();
  38.                         loReader.Dispose();
  39.  
  40.  
  41.                         loConnection.Close();
  42.                     }
  43.                 }
  44.             }
  45.            catch (OracleException dbex)
  46.              {
  47.                 throw new System.Exception(dbex.Message);
  48.              }
  49.             //oCn.Close();
  50.             return loTB_MenuLista;
  51.  
  52.         }
  #7 (permalink)  
Antiguo 14/12/2012, 14:41
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Respuesta: Problema con oracle- C#.NET

Como comentario adicional cuando se utiliza "using" ya no es necesario hacer Close ni Dispose de los objetos (es redundante)

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net

Etiquetas: c#
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:47.