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

executescalar

Estas en el tema de executescalar en el foro de .NET en Foros del Web. Hola, no entiendo porque esta sentencia me da error: SqlCommand ultimId = new SqlCommand("SELECT MAX(IDENTIFICADOR) FROM TABLA_A",sqlConnection1); int re=(int)ultimId.ExecuteScalar(); El error es: 'La conversión especificada ...
  #1 (permalink)  
Antiguo 26/04/2004, 08:47
 
Fecha de Ingreso: febrero-2004
Mensajes: 67
Antigüedad: 20 años, 2 meses
Puntos: 0
executescalar

Hola,

no entiendo porque esta sentencia me da error:

SqlCommand ultimId = new SqlCommand("SELECT MAX(IDENTIFICADOR) FROM TABLA_A",sqlConnection1);

int re=(int)ultimId.ExecuteScalar();

El error es:

'La conversión especificada no es válida'

El campo 'identificador' es un bigint (autonumerico). Lo que pretendo es obtener el ultimo identificador inserido en una tabla.

Gracias.
  #2 (permalink)  
Antiguo 30/04/2004, 08:31
 
Fecha de Ingreso: junio-2001
Ubicación: Cordoba, Argentina
Mensajes: 190
Antigüedad: 22 años, 11 meses
Puntos: 0
puede ser que te este devolviendo null, por eso da error. Deberias preguntar antes de hacer lel cast si es null (Valor is DBNull.Value).
__________________
Martin
  #3 (permalink)  
Antiguo 30/04/2004, 12:22
 
Fecha de Ingreso: octubre-2003
Mensajes: 85
Antigüedad: 20 años, 7 meses
Puntos: 0
El resultado de ultimId.ExecuteScalar(); se lo debes asignar a una variable de tipo Object.
__________________
ASP.Net - Relket - ASP.Net

Última edición por Relket; 30/04/2004 a las 12:23
  #4 (permalink)  
Antiguo 30/04/2004, 13:21
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 5 meses
Puntos: 8
Reltek eso no es asi.ExecuteScalar devuelve un Integer indicando el número de filas que se ha visto afectada por la sentencia,por lo que el resultado se almacena en un Integer,saludos
  #5 (permalink)  
Antiguo 01/05/2004, 22:42
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:
ExecuteScalar devuelve un Integer indicando el número de filas que se ha visto afectada por la sentencia,
Que tal Sundark.. , solo quería aclarar una cosa, el ExecuteScalar de hecho se aplica para las funciones agregadas de SQL por ejemplo, AVG, SUM, MAX, MIN, etc, ya que por ejemplo puedes tener una suma de 360 y tan solo tienes 3 registros.. que ésto no correspondería al número de filas afectadas si no mas bien a la suma de los 3 registros.. (supongamos que cada uno tuviera un valor de 120 = 360)

Mas bien el que devuelve un Integer indicando el numero de filas afectadas es el ExecuteNonQuery que ese se ocupa para las DML (Data Manipulation Language) insert, delete, update...

Y en el ejemplo posiblemente el resultado de la query:

Cita:
SqlCommand ultimId = new SqlCommand("SELECT MAX(IDENTIFICADOR) FROM TABLA_A ",sqlConnection1);

int re=(int)ultimId.ExecuteScalar();
Tenga un valor mayor a un entero...porque no lo pruebas con un tipo double..??


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

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 02/05/2004, 06:06
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 5 meses
Puntos: 8
Ajan grasias por la aclaración RootK,según los manuales que leí y lo que me enseñaron en clases era tal como yo lo habia explicado,pero ya veo que estaban equivocados ^_^,gracias y saludos
  #7 (permalink)  
Antiguo 02/05/2004, 12:35
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 5 meses
Puntos: 8
Ejem ya por curiosidad me dio por mirar los apuntes y me he dado cuenta de que me confundí en la explicación y di la de ExecuteNonQuery en vez de la de ExecuteScalar
Para ExecuteScalar tengo apuntado que se utiliza cuando se desea obtener la primera columna de la primera fila del conjunto de registros,el resto de datos no se tendrá en cuenta. La utilización de este método tiene sentido cuando estamos ejecutando una sentencia SQL del tipo SELECT COUNT,SELECT MAX,SELECT AVG,etc etc y devuelve un objeto de la clase genérica Object

Pues eso,rectificar es de sabios y ahi rectifico(aunque no soy ni mucho menos un sabio ^_^) Saludoss
  #8 (permalink)  
Antiguo 02/05/2004, 15:13
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:
Para ExecuteScalar tengo apuntado que se utiliza cuando se desea obtener la primera columna de la primera fila del conjunto de registros
Ahora si estoy de acuerdo contigo...

Cita:
Pues eso,rectificar es de sabios y ahi rectifico(aunque no soy ni mucho menos un sabio ^_^)
Tampoco soy sabio pero siempre es bueno aclarar cosas para que no queden dudas.


Un saludo
  #9 (permalink)  
Antiguo 08/02/2005, 13:22
 
Fecha de Ingreso: febrero-2005
Mensajes: 4
Antigüedad: 19 años, 2 meses
Puntos: 0
ExecuteScalar()

Veo que en este foro hay muchos sabios,

espero que sepan esto porque estoy cansado de buscar y buscar y no encontrar solución.

Lo que necesito es luego de Insertar un Valor, obtener el valor de la Identidad de la fila recien insertada.

lo que yo tengo hecho es:

sql = "INSERT INTO TABLA (campo1,campo2) VALUES (valor1,valor2)"
Dim dt As New SqlCommand(sql, cnDatos)
dt.Connection.Open()
dt.ExecuteScalar()
dt.Connection.Close()
Cómo obtendría en una variable Integer el valor de la Identidad.

Gracias
  #10 (permalink)  
Antiguo 08/02/2005, 14:03
 
Fecha de Ingreso: marzo-2004
Mensajes: 198
Antigüedad: 20 años, 1 mes
Puntos: 1
create procedure addproduct
( @campo1 nvarchar(80),
@campo2 nvarchar(80) )
As
INSERT TABLA (campo1,campo2) VALUES (@valor1,@valor2)
return @@Identity

Este procedimiento almacenado inserta un registro y devuelve la variable global @@Identity el ID del ultimo registro insertado

A ver si te sirve
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 06:32.