elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  capturar exception en .net
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: capturar exception en .net  (Leído 6,121 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
capturar exception en .net
« en: 5 Octubre 2015, 05:06 am »

hola a todos, solo quiero que me orienten de como capturar una excepcion que dispara oracle y que es una cadena, no las he podido controlar con el codigo de visual basic.net porque de la forma en que lo hago retornaria una cadena y la funcion donde tengo el try catch retorna un entero si la ejecucion es normal
Código
  1. public function ejecutasql() as integer
  2. try
  3. 'todo_bien en la consulta
  4. return 1
  5. Catch ex As OracleException
  6. Return "Error al generar Consulta" & ex.ToString
  7. End Try
  8.  
tambien he probado con esta otra pero igual no me controla la excepcion sino que de una vez me detiene la ejecucion
Código
  1. Catch ex As OracleException
  2.            Throw New ArgumentException("Error al generar consulta " & ex.Message.ToString)
  3.        End Try
  4.  


En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: capturar exception en .net
« Respuesta #1 en: 5 Octubre 2015, 12:01 pm »

quiero que me orienten de como capturar una excepcion que dispara oracle y que es una cadena, no las he podido controlar con el codigo de visual basic.net porque de la forma en que lo hago retornaria una cadena y la funcion donde tengo el try catch retorna un entero si la ejecucion es normal
Código
  1.  
  2. public function ejecutasql() as integer
  3.  
  4. ...
  5. return 1
  6.  
  7. Catch...
  8. Return "Error al generar Consulta" & ex.ToString
  9.  
  10. End Function

Si tienes una función cuyo valor de retorno es Integer, entonces pretender devolver un datatype distinto (String) es un error de concepto por parte del programador, y la solución más eficiente es tan sencilla como evitar querer hacer eso.

Explica detalladamente por que sientes la necesidad de devolver un string y un integer en una misma función, y así podré(mos) ofrecerte una solución apropiada a tus necesidades.

De todas formas... siempre puedes especificar un valor de retorno de tipo Object en lugar de Integer y hacer los castings necesarios al llamar a la función, pero esto lo considero malos hábitos de programación, no te recomiendo hacerlo.

Por último, decirte que considero que eso no debería ser una función, sino un método, ya que no necesitas devolver nada para evaluar un success/fail.

Saludos!


« Última modificación: 5 Octubre 2015, 12:07 pm por Eleкtro » En línea



Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: capturar exception en .net
« Respuesta #2 en: 5 Octubre 2015, 12:04 pm »

Prueba esto:

Código
  1.        Try
  2.            Dim Resultado As IntPtr 'O Integer o lo que sea
  3.            ' Resultado = ...
  4.  
  5.  
  6.            Dim win32Err As Integer = System.Runtime.InteropServices.Marshal.GetLastWin32Error
  7.  
  8.  
  9.  
  10.            If Resultado = IntPtr.Zero Then  'Si Resultado  es un Stream o String debes poner  'If Resultado.Length = IntPtr.Zero Then'
  11.                Throw New System.ComponentModel.Win32Exception([error]:=win32Err)
  12.            Else
  13.  
  14.                'Variable/Control/Propiedad = Resultado
  15.  
  16.            End If
  17.  
  18.        Catch ex As Exception
  19.            Throw
  20.  
  21.        Finally
  22.            'Lo que quieras que haga al termintar...
  23.  
  24.        End Try


Pero si lo único que quieres es obtener el mensaje error entonces:

Código
  1.        Try
  2.  
  3.        Catch ex As Exception
  4.            MessageBox.Show(ex.Message)
  5.        End Try

ya que como dice Elektro devuelve un valor String
« Última modificación: 5 Octubre 2015, 12:10 pm por Lekim » En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: capturar exception en .net
« Respuesta #3 en: 5 Octubre 2015, 12:25 pm »

Lekim, la función GetLastWin32Error es para el P/Invoking, solo se debe utilizar despues de llamar a una función no administrada (Windows API) y siempre que dicha función devuelva un código de error (no todas lo hacen por defecto), su propio nombre y la descripción lo indican por si mismo:

Returns the error code returned by the last unmanaged function that was called using platform invoke that has the DllImportAttribute.SetLastError flag set

Aparte de eso, en las funciones de la WinAPI que devuelvan un valor numérico, un valor de retorno tanto de "0" como distinto a "0" puede significar tanto un success como un tipo de error específico, es algo que depende de la función ya que no hay ningún estándar en ese sentido, cada función de la WinAPI es un mundo.

Aparte también, y solo por informar del siguiente dato, cabe mencionar que no existe una sincronización perfecta, como el nombre de la función explica por si mismo, esta se limita a devolver el último error Win32 conocido, ya sea el código de error devuelto por tu llamada, o sea el de otra llamada más reciente realizada por la aplicación.

Despues de esta pequeña aclaración, solo quiero aclarar que para controlar errores de miembros administrados (es decir, puro código .Net) se utiliza un bloque Try/Catch/Finally/End, nada más, por lo tanto el segundo código que has mostrado sería lo correcto :).

Saludos!
« Última modificación: 5 Octubre 2015, 12:48 pm por Eleкtro » En línea



d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: capturar exception en .net
« Respuesta #4 en: 5 Octubre 2015, 13:43 pm »

la razon de hacer una funcion que devuelva un entero es porque al hacer el excuteNonQuery me devuelve un 1 y entonces lo retorno hasta la pagina aspx para dar un mensaje de "Operacion exitosa", y segun la orientacion que me han dado esta funcion  hare  que retorne la cadena de  mensaje exitoso desde aqui para que tambien pueda devolver una cadena de error.
En línea

d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: capturar exception en .net
« Respuesta #5 en: 5 Octubre 2015, 13:48 pm »

un ultimo detalle encontre ahora que cambio el tipo de retorno, dentro  de la misma clase donde tengo la funcion de ejecutar sql, tengo una que devuelve un dataset para llenar un dropdownlist, en esta funcion creo que no puedo cambiar el tipo de retorno para enviar el mensaje de error
En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: capturar exception en .net
« Respuesta #6 en: 6 Octubre 2015, 04:13 am »

la razon de hacer una funcion que devuelva un entero es porque al hacer el excuteNonQuery me devuelve un 1 y entonces lo retorno hasta la pagina aspx para dar un mensaje de "Operacion exitosa", y segun la orientacion que me han dado esta funcion  hare  que retorne la cadena de  mensaje exitoso desde aqui para que tambien pueda devolver una cadena de error.

Entonces, ¿no sería más apropiado hacer una función que devuelva un string, para cambiar el "1" por un "Operacion exitosa"?.

Código
  1. public function ejecutasql() as string
  2.  
  3. try
  4. 'todo bien en la consulta
  5. return "Operación exitosa"
  6.  
  7. catch ex As OracleException
  8. Return ("Error al generar Consulta: " & ex.Message)
  9.  
  10. end try
  11.  
  12. End Try

...De esa manera estarías haciendo las cosas mejor que devolver un integer y string.

Si necesitas rehutilizar ese código de error personalizado (1), entonces también podrías hacerlo de la siguiente manera:
Código
  1. public function ejecutasql() as keyvaluepair(of integer, string)
  2.  
  3. try
  4. 'todo bien en la consulta
  5. return new keyvaluepair(of integer, string)(1, "Operación exitosa")
  6.  
  7. catch ex As OracleException
  8. return new keyvaluepair(of integer, string)(0, ("Error al generar Consulta: " & ex.Message))
  9.  
  10. end try
  11.  
  12. End Try

Saludos
« Última modificación: 6 Octubre 2015, 04:17 am por Eleкtro » En línea



d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: capturar exception en .net
« Respuesta #7 en: 6 Octubre 2015, 13:30 pm »

ya lo resolvi el problema es que solo habia trabajo con messageBox y ahora que requiere un mensaje sobre algun label de una aplicacion web no podia comprender lo del valor de retorno y la exception, gracias a todos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Exception NullPointerException
Java
bertamax 2 2,523 Último mensaje 9 Septiembre 2012, 16:57 pm
por bertamax
Exception en codeblocks
Dudas Generales
m@o_614 4 4,528 Último mensaje 26 Octubre 2013, 02:52 am
por Mister12
c# Null Exception imposible.
.NET (C#, VB.NET, ASP)
samuelhm 3 2,292 Último mensaje 25 Mayo 2014, 18:30 pm
por El Benjo
exception en arbol binario
Java
m@o_614 1 2,161 Último mensaje 22 Noviembre 2014, 21:46 pm
por DarK_FirefoX
Exception detiene la ejecucion
.NET (C#, VB.NET, ASP)
d91 0 1,768 Último mensaje 7 Octubre 2015, 14:50 pm
por d91
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines