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

Error en ExecuteScalar

Estas en el tema de Error en ExecuteScalar en el foro de .NET en Foros del Web. Amigos alguien me puede decir donde esta la falla este es el programa. : Private Sub Form1_Load(ByVal sender As System.Object, ByVale As System.EventArgs) Handles MyBase.Load ...
  #1 (permalink)  
Antiguo 04/11/2004, 21:36
Avatar de karnash  
Fecha de Ingreso: enero-2003
Ubicación: Cochabamba-Bolivia
Mensajes: 93
Antigüedad: 21 años, 3 meses
Puntos: 0
Error en ExecuteScalar

Amigos alguien me puede decir donde esta la falla
este es el programa. :

Private Sub Form1_Load(ByVal sender As System.Object, ByVale As System.EventArgs) Handles MyBase.Load
conexion.ConnectionString = "server=(local);" & _
"database=midb;uid=sa;pwd=;"
Dim comando As New SqlCommand("select cod_unidad from
unidad where nombre_unidad=@c1", conexion)
comando.Parameters.Add(New SqlParameter("@c1",
SqlDbType.NVarChar))
comando.Parameters("@c1").Value = get_n()
Dim con As Integer
Try
conexion.Open()
con = CType(comando.ExecuteScalar, Integer)
MessageBox.Show("Codigo: " & con)
Finally
conexion.Close()
End Try
End Sub

Public Function get_n() As Integer
Dim com As New SqlCommand("select cod_unidad from unidad"
& _"where nombre_unidad=@w", conexion)
Dim valor As Integer
com.Parameters.Add(New SqlParameter("@w", SqlDbType.NVarChar))
com.Parameters("@w").Value = "jarabe"
Try
conexion.Open()
valor = CType(com.ExecuteScalar, Integer)
Return valor
Finally
conexion.Close()
End Try
End Function


en aca me muestra el error.. :

on = CType(comando.ExecuteScalar, Integer)

este es el error... :

Excepción no controlada del tipo
'System.Data.SqlClient.SqlException' en system.data.dll

Información adicional: Error del sistema.


sera que nose puede pasar como parametro un Escalar que un metodo me devuelve.. :? gracias.
__________________
www.facebook.com/gajofe
  #2 (permalink)  
Antiguo 04/11/2004, 22:28
 
Fecha de Ingreso: octubre-2003
Mensajes: 85
Antigüedad: 20 años, 7 meses
Puntos: 0
Intenta esto

Usa la clase Convert del framework:
con = Convert.ToInt32(comando.ExecuteScalar)

En el caso de que no te funcione almacena lo que te devuelve ExecuteScalar en una variable de tipo Objecto y luego ese objecto conviertelo a Integer.
__________________
ASP.Net - Relket - ASP.Net
  #3 (permalink)  
Antiguo 05/11/2004, 06:48
Avatar de karnash  
Fecha de Ingreso: enero-2003
Ubicación: Cochabamba-Bolivia
Mensajes: 93
Antigüedad: 21 años, 3 meses
Puntos: 0
Pues de ambas maneras me sigue reportando el mismo error.. :( pues no tengo idea de como hacerlo pero necesito devolver un solo resultado que me pasa el metodo . pero como entrada de otro metodo.. :P gracias por la ayuda
__________________
www.facebook.com/gajofe
  #4 (permalink)  
Antiguo 05/11/2004, 09:48
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Pues de ambas maneras me sigue reportando el mismo error..
karnash, recuerda que el ExecuteScalar es para regresar la primera fila de la primera columna por ejemplo de una funcion agregada,(Select count(*)..)

pero en tu caso estás haciendo un select campo1..y por lo tanto vas a necesitas de un ExecuteReader..

Ejemplo:

Cita:
Dim com As New SqlCommand("select cod_unidad from unidad"
& _"where nombre_unidad=@w", conexion)
Dim valor As Integer
com.Parameters.Add(New SqlParameter("@w", SqlDbType.NVarChar))
com.Parameters("@w").Value = "jarabe"
dim dr as SqlDataReader
Try
conexion.Open()
dr = com.ExecuteReader()
If dr.Read()
valor = CType(dr("cod_unidad"), Integer)
End IF
dr.close
...
..

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

Exentrit - Soluciones SharePoint & Net
  #5 (permalink)  
Antiguo 05/11/2004, 12:24
Avatar de karnash  
Fecha de Ingreso: enero-2003
Ubicación: Cochabamba-Bolivia
Mensajes: 93
Antigüedad: 21 años, 3 meses
Puntos: 0
La verdad les agradesco todo el interes que prestan para ayudarme.. :P pero aun reporta error... :(

Public Function get_n() As Integer
Dim com As New SqlCommand("select cod_unidad from producto" & _
"where cod_producto=@c3", conexion)

com.Parameters.Add(New SqlParameter("@c3", SqlDbType.Int))
com.Parameters("@c3").Value = "1"
Dim dr As SqlDataReader
Try
conexion.Open()
dr = com.ExecuteReader() ---------->>> aca reporta error.. :(
If (dr.Read) Then
Return CType(dr("cod_unidad"), Integer)
End If
dr.Close()
Finally
conexion.Close()
End Try
End Function
__________________
www.facebook.com/gajofe
  #6 (permalink)  
Antiguo 05/11/2004, 12:34
Avatar de karnash  
Fecha de Ingreso: enero-2003
Ubicación: Cochabamba-Bolivia
Mensajes: 93
Antigüedad: 21 años, 3 meses
Puntos: 0
creo que vale aclarar que todas las consultas ya las prove y solo devuelven 1 resultado.. :$ que es unico, y que este metodod get_n() es llamado desde otro metodo que no es el Load, ademas que recibe del metodo get_n() un dato que es Utilizado para llenar el Parametro de otra consulta y el resultado de eso debe ser guardado en la BD .. :P
__________________
www.facebook.com/gajofe
  #7 (permalink)  
Antiguo 05/11/2004, 12:35
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
P pero aun reporta error... :(
Mira, por lo que veo en tu query te falta un espacio

Cambia ésto:

Cita:
Dim com As New SqlCommand("select cod_unidad from producto" & _
"where cod_producto=@c3", conexion)
Por ésto:

Cita:
Dim com As New SqlCommand("select cod_unidad from producto " & _
"where cod_producto=@c3", conexion)
Puse un espacio en blanco despues de producto

Prueba y nos cuentas que tal
  #8 (permalink)  
Antiguo 05/11/2004, 12:50
Avatar de karnash  
Fecha de Ingreso: enero-2003
Ubicación: Cochabamba-Bolivia
Mensajes: 93
Antigüedad: 21 años, 3 meses
Puntos: 0
:) que suerte mala pata la mia que por tan pequeños detalles falle... :) todo el lio era ese... .:$ millon de gracias... y ya Saben si vienen por Bolivia... :P me avisan.. ;)
Gracias mi amigo.. :) ahora lo probare si funciona con el ExecuteScalar.. :)
__________________
www.facebook.com/gajofe
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 09:13.