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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  problema al llamar a una capa de negocios
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema al llamar a una capa de negocios  (Leído 2,887 veces)
djnilo

Desconectado Desconectado

Mensajes: 13


Ver Perfil
problema al llamar a una capa de negocios
« en: 18 Octubre 2016, 04:08 am »

buenas tardes señores programadores si alguien me puede echar una por fa
estoy haciendo una aplicacion estacionamiento de vehiculos en capas vb.net y sql server
trata de llenar los datos de una consulta sql y llenar los textbox del formulario si pongo todo el codigo en el formulario funciona perfectamente entoces para hacerlo mas ordenado lo quise hacer en capas entoces tengo esta funcion
que se llama mostrarvehiculos esta en la capa datos
Código
  1. Public Function mostrarvehiculos(obj As VregistroEntrada)
  2.  
  3.        Dim Conn As New SqlConnection(conexion.Connectionstring)
  4.        Dim eEntradavehiculo As VregistroEntrada = Nothing
  5.  
  6.        Dim Cmd As New SqlCommand
  7.        Try
  8.            Conn.Open()
  9.            Cmd.CommandText = "Select IdEntraVehiculo,Placa,FechaHoraEntrada,Codigo From EntradaVehiculo Where Codigo = @Codigo"
  10.            Cmd.CommandType = CommandType.Text
  11.            Cmd.Connection = Conn
  12.            Cmd.Parameters.Add("@Codigo", SqlDbType.Int).Value = obj.Codigo
  13.            Dim DT As New SqlDataAdapter(Cmd)
  14.            Dim TABLA As New DataTable
  15.            DT.Fill(TABLA)
  16.            eEntradavehiculo = New VregistroEntrada
  17.            If TABLA.Rows.Count > 0 Then
  18.  
  19.                Dim row As DataRow = TABLA.Rows(0)
  20.                eEntradavehiculo.Placa = If(CStr(row.IsNull(1)), "", row(1))
  21.                eEntradavehiculo.FechaHoraEntrada = If(row.IsNull(2), Nothing, row(2))
  22.                eEntradavehiculo.Codigo = CStr(row("Codigo"))
  23.  
  24.            End If
  25.  
  26.        Catch ex As Exception
  27.            Throw New Exception(ex.Message)
  28.        Finally
  29.            If Conn.State = ConnectionState.Open Then
  30.                Conn.Close()
  31.                Conn.Dispose()
  32.            End If
  33.        End Try
  34.        Return eEntradavehiculo
  35.    End Function
y en la capa entidad me manda un error dice que no puedo convertirlo a integer

Código
  1. Function mostrarvehiculos(ByVal obj As Capa_Entidad.VregistroEntrada)
  2.  
  3.        Dim OMostrar As New DaoInsertTicker
  4.  
  5.        Dim Result As Integer = 0
  6.        Try
  7.            Result = Convert.ToInt32(OMostrar.mostrar(obj))
  8.        Catch ex As Exception
  9.            Throw New Exception(ex.Message)
  10.        End Try
  11.        Return Result
  12.    End Function
tratao de llamar a mi funcion pero me marca error (  Result = Convert.ToInt32(OMostrar.mostrar(obj))
no se puede convertir a inter

tengo el formulario mostrar la informacion segun la consulta de la funcion pero no se como llamarlo


En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: problema al llamar a una capa de negocios
« Respuesta #1 en: 18 Octubre 2016, 12:09 pm »

Por la forma en que está no puedo probar el código pero te puedo decir que una función debe establecerse con el tipo: Function  X() AS ....

Código
  1. Function mostrarvehiculos(ByVal obj As Capa_Entidad.VregistroEntrada) As Integer

Código
  1.    Public Function mostrarvehiculos(obj As Object) As Int32


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: problema al llamar a una capa de negocios
« Respuesta #2 en: 18 Octubre 2016, 16:26 pm »

me marca error (  Result = Convert.ToInt32(OMostrar.mostrar(obj))
no se puede convertir a inter

Disculpa pero evidentemente el mensaje de error no dice "no se puede convertir a inter" con esas palabras...

Sí tienes un problema sobre un mensaje de error muy específico entonces deberías mostrar el mensaje de error completo tal y como se te muestra en la IDE, ¿que menos que hacer eso si buscas ayuda?.

El método System.Convert.ToInt32() acepta muchos tipos de parámetros pero tampoco has especificado que tipo de valor devuelve la función DaoInsertTicker.mostrar(), tampoco has mostrado el código de esa función, ni nos has dicho que valor le estás pasando a la función, solo has descrito por encima el propósito del código pero eso no es relevante con respecto al problema, no has proporcionado ninguna información sobre el problema, ni siquiera el mensaje de error completo... De verdad lo siento que escriba un párrafo entero solo para decir esto, pero me molesta bastante que se hagan las cosas así, por que no entiendo de que sirve invertir 10 o 15 minutos para formular una pregunta sobre programación si al terminar de escribir el post no se ha proporcionado ninguna información para poder ayudarte, así pierdes tiempo tu y también los demás, por que no somos adivinos...

De todas formas puedes corregir el fallo por ti mismo sin ayuda externa, o al menos localizarlo, simplemente antes de intentar llamar a la función System.Convert.ToInt32() comprueba el valor que le vas a pasar, primero comprueba el valor de obj y luego el valor que devuelve la función DaoInsertTicker.mostrar() cuando le pasasas obj, así de sencillo, ¡inténtalo!.

Por último, te recomiendo una solución global a muchos de los problemas que hay en el código que has mostrado y en la parte que no hayas mostrado (debido a malos hábitos de escritura de código VB.NET), te recomiendo establecer las siguientes sentencias Option:
Código
  1. Option Strict On
  2. Option Explicit On

Lo aconsejable es activarlo de forma permanente desde las opciones de la IDE, pero bueno, lo que puedes hacer es copiar y colocar esas dos lineas de código que te he mostrado, arriba del todo de la clase conflictiva y de las demás classes de tu proyecto, y entonces ve corrigiendo uno por uno los errores de compilación que Visual Studio te irá indicando, entre esos errores te indicará por ejemplo el mal hábito que ya explicó @okik, a una función se le debe asignar un tipo de retorno, de lo contrario devolverá el tipo por defecto, Object, y esto no es nada bueno para conversiones de tipos como lo que intentas hacer.

Saludos!
« Última modificación: 19 Octubre 2016, 01:43 am por Eleкtro » En línea

djnilo

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: problema al llamar a una capa de negocios
« Respuesta #3 en: 19 Octubre 2016, 01:52 am »

Por la forma en que está no puedo probar el código pero te puedo decir que una función debe establecerse con el tipo: Function  X() AS ....

Código
  1. Function mostrarvehiculos(ByVal obj As Capa_Entidad.VregistroEntrada) As Integer

Código
  1.    Public Function mostrarvehiculos(obj As Object) As Int32
muchas gracias por responder okik
pero me sigue mandando el error
Código
  1. Public Function mostrarvehiculos(obj As VregistroEntrada) As Integer
  2.  
  3.        Dim Conn As New SqlConnection(conexion.Connectionstring)
  4.        Dim eEntradavehiculo As VregistroEntrada = Nothing
  5.  
  6.        Dim Cmd As New SqlCommand
  7.        Try
  8.            Conn.Open()
  9.            Cmd.CommandText = "Select IdEntraVehiculo,Placa,FechaHoraEntrada,Codigo From EntradaVehiculo Where Codigo = @Codigo"
  10.            Cmd.CommandType = CommandType.Text
  11.            Cmd.Connection = Conn
  12.            Cmd.Parameters.Add("@Codigo", SqlDbType.Int).Value = obj.Codigo
  13.            Dim DT As New SqlDataAdapter(Cmd)
  14.            Dim TABLA As New DataTable
  15.            DT.Fill(TABLA)
  16.            eEntradavehiculo = New VregistroEntrada
  17.            If TABLA.Rows.Count > 0 Then
  18.  
  19.                Dim row As DataRow = TABLA.Rows(0)
  20.                eEntradavehiculo.Placa = If(CStr(row.IsNull(1)), "", row(1))
  21.                eEntradavehiculo.FechaHoraEntrada = If(row.IsNull(2), Nothing, row(2))
  22.                eEntradavehiculo.Codigo = CStr(row("Codigo"))
  23.  
  24.            End If
  25.  
  26.        Catch ex As Exception
  27.            Throw New Exception(ex.Message)
  28.        Finally
  29.            If Conn.State = ConnectionState.Open Then
  30.                Conn.Close()
  31.                Conn.Dispose()
  32.            End If
  33.        End Try
  34.        Return eEntradavehiculo
  35.    End Function
en esta linea    Return eEntradavehiculo me dice que no se puede convertir en integer

capa entidad
Código
  1. Public Class VregistroEntrada
  2.    Public Property IdTicker As Integer
  3.    Public Property Placa As String
  4.    Public Property FechaHoraEntrada As DateTime
  5.    Public Property Codigo As Integer
  6.  
  7. End Class
  8.  
capa negocios
 Public Function Mostrar(objmostrar As VregistroEntrada) As DataRow
        Dim OMostrar As New DaoInsertTicker
        Return OMostrar.mostrar(objmostrar)
    End Function




MOD: Imagene adaptada a las normas del foro.
« Última modificación: 19 Octubre 2016, 17:42 pm por MCKSys Argentina » En línea

djnilo

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: problema al llamar a una capa de negocios
« Respuesta #4 en: 19 Octubre 2016, 01:59 am »

Disculpa pero evidentemente el mensaje de error no dice "no se puede convertir a inter" con esas palabras...

Sí tienes un problema sobre un mensaje de error muy específico entonces deberías mostrar el mensaje de error completo tal y como se te muestra en la IDE, ¿que menos que hacer eso si buscas ayuda?.

El método System.Convert.ToInt32() acepta muchos tipos de parámetros pero tampoco has especificado que tipo de valor devuelve la función DaoInsertTicker.mostrar(), tampoco has mostrado el código de esa función, ni nos has dicho que valor le estás pasando a la función, solo has descrito por encima el propósito del código pero eso no es relevante con respecto al problema, no has proporcionado ninguna información sobre el problema, ni siquiera el mensaje de error completo... De verdad lo siento que escriba un párrafo entero solo para decir esto, pero me molesta bastante que se hagan las cosas así, por que no entiendo de que sirve invertir 10 o 15 minutos para formular una pregunta sobre programación si al terminar de escribir el post no se ha proporcionado ninguna información para poder ayudarte, así pierdes tiempo tu y también los demás, por que no somos adivinos...

De todas formas puedes corregir el fallo por ti mismo sin ayuda externa, o al menos localizarlo, simplemente antes de intentar llamar a la función System.Convert.ToInt32() comprueba el valor que le vas a pasar, primero comprueba el valor de obj y luego el valor que devuelve la función DaoInsertTicker.mostrar() cuando le pasasas obj, así de sencillo, ¡inténtalo!.

Por último, te recomiendo una solución global a muchos de los problemas que hay en el código que has mostrado y en la parte que no hayas mostrado (debido a malos hábitos de escritura de código VB.NET), te recomiendo establecer las siguientes sentencias Option:
Código
  1. Option Strict On
  2. Option Explicit On

Lo aconsejable es activarlo de forma permanente desde las opciones de la IDE, pero bueno, lo que puedes hacer es copiar y colocar esas dos lineas de código que te he mostrado, arriba del todo de la clase conflictiva y de las demás classes de tu proyecto, y entonces ve corrigiendo uno por uno los errores de compilación que Visual Studio te irá indicando, entre esos errores te indicará por ejemplo el mal hábito que ya explicó @okik, a una función se le debe asignar un tipo de retorno, de lo contrario devolverá el tipo por defecto, Object, y esto no es nada bueno para conversiones de tipos como lo que intentas hacer.

Saludos!
muchas gracias por responder elektro

capa negocios esta este codigo
Código
  1.        Dim Conn As New SqlConnection(conexion.Connectionstring)
  2.        Dim eEntradavehiculo As VregistroEntrada = Nothing
  3.  
  4.        Dim Cmd As New SqlCommand
  5.        Try
  6.            Conn.Open()
  7.            Cmd.CommandText = "Select IdEntraVehiculo,Placa,FechaHoraEntrada,Codigo From EntradaVehiculo Where Codigo = @Codigo"
  8.            Cmd.CommandType = CommandType.Text
  9.            Cmd.Connection = Conn
  10.            Cmd.Parameters.Add("@Codigo", SqlDbType.Int).Value = obj.Codigo
  11.            Dim DT As New SqlDataAdapter(Cmd)
  12.            Dim TABLA As New DataTable
  13.            DT.Fill(TABLA)
  14.            eEntradavehiculo = New VregistroEntrada
  15.            If TABLA.Rows.Count > 0 Then
  16.  
  17.                Dim row As DataRow = TABLA.Rows(0)
  18.                eEntradavehiculo.Placa = If(CStr(row.IsNull(1)), "", row(1))
  19.                eEntradavehiculo.FechaHoraEntrada = If(row.IsNull(2), Nothing, row(2))
  20.                eEntradavehiculo.Codigo = CStr(row("Codigo"))
  21.  
  22.            End If
  23.  
  24.        Catch ex As Exception
  25.            Throw New Exception(ex.Message)
  26.        Finally
  27.            If Conn.State = ConnectionState.Open Then
  28.                Conn.Close()
  29.                Conn.Dispose()
  30.            End If
  31.        End Try
  32.        Return eEntradavehiculo
  33.    End Function
en esta linea me marca el error   Return eEntradavehiculo
el integer lo que pasa es que son son datarow me imagino por eso manda ese error

codigo capa entidad
Código
  1. Public Class VregistroEntrada
  2.    Public Property IdTicker As Integer
  3.    Public Property Placa As String
  4.    Public Property FechaHoraEntrada As DateTime
  5.    Public Property Codigo As Integer
  6.  
  7. End Class
  8.  
capa negocio
Código
  1. Function mostrarvehiculos(ByVal obj As Capa_Entidad.VregistroEntrada)
  2.  
  3.        Dim OMostrar As New DaoInsertTicker
  4.  
  5.        Dim Result As Integer = 0
  6.        Try
  7.            Result = Convert.ToInt32(OMostrar.mostrar(obj))
  8.        Catch ex As Exception
  9.            Throw New Exception(ex.Message)
  10.        End Try
  11.        Return Result
  12.    End Function

MOD: Imagen adaptada a las normas del foro.
« Última modificación: 19 Octubre 2016, 17:43 pm por MCKSys Argentina » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Grabadoras DVD - Una Capa y Doble Capa
Software
caciqueweb 1 3,901 Último mensaje 2 Agosto 2004, 21:44 pm
por Cobac
Problema luego de Tostar un DVD Doble Capa
Multimedia
_the_master_36 1 1,504 Último mensaje 6 Enero 2006, 01:11 am
por Sourraund
Problema con grabación de DVD Doble Capa
Software
stromboli 1 3,344 Último mensaje 8 Enero 2006, 09:35 am
por stromboli
Situar capa en el centro de otra capa que la contiene
Desarrollo Web
piterpalomitas 4 3,075 Último mensaje 14 Marzo 2012, 00:27 am
por Hadess_inf
Paso de capa Hardware a primera capa abstracta programación
Hardware
minicatsCB 2 3,624 Último mensaje 16 Junio 2016, 11:23 am
por minicatsCB
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines