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

Devolver nº filas afectadas

Estas en el tema de Devolver nº filas afectadas en el foro de .NET en Foros del Web. Hola, antes de llenar un dataset con un OledbDataAdapter, quiero saber el nº de filas afectadas. Para saber eso, no sería así?: Cita: .... sqlStr="select ...
  #1 (permalink)  
Antiguo 28/07/2006, 04:57
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 4 meses
Puntos: 156
Pregunta Devolver nº filas afectadas

Hola,

antes de llenar un dataset con un OledbDataAdapter, quiero saber el nº de filas afectadas. Para saber eso, no sería así?:

Cita:


....

sqlStr="select campo1,campo2,campo3 from tabla1 campo1=@valor"

....

conn.Open()
cmd.CommandText = sqlStr
cmd.Connection = conn
cmd.Parameters.Add("@valor", cond2)
dataAdapt.SelectCommand = cmd
totalRows = dataAdapt.SelectCommand.ExecuteNonQuery

.....etc
Es que me devuleve 0 filas. Y si hago cmd.executeNonQuery también me devuelve 0. ¿Qué estoy haciendo mal?


saludos!
  #2 (permalink)  
Antiguo 28/07/2006, 08:40
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 20 años, 1 mes
Puntos: 9
Para devolver un valor se utiliza ExecuteScalar. El ExecuteNonQuery es para ejecutar consultas que no devuelven nada.
Pero, también tengo mis dudas que el ExecuteScalar, para ejecutar una SELECT, te devuelva el numero de registros. Para obtener ese datos siempre he tirado de, por ejemplo, la propiedad Rows.Count de un datatable o cosas así.
Un saludo!
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 28/07/2006, 09:40
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 4 meses
Puntos: 156
Pregunta

hola,


Normalmente cuando quiero saber el nº de filas afectadas o bien hago lo que dices tu del Rows.count, o bien hago una consulta del tipo "select count(campo1) from tabla1 where bla bla bla" y eso también me devuelve el nº de filas.

Lo que pasa, que en este caso, no quería ejecutar dos veces la consulta, porque tiene varios filtros y es un poco engorroso. Y además antes de llenar el dataset tengo que saber el nº de filas.


Sobre el ExecuteScalar, sólo me devuelve el último registro. En este caso me devuelve el nº del ID del último registro.

Sobre el ExecuteNonQuery,en la ayuda del VB había leído lo siguiente:

Cita:
Valor devuelto
Número de filas afectadas.

que raro no?


saludos!
  #4 (permalink)  
Antiguo 28/07/2006, 11:34
Avatar de Alex Reyes  
Fecha de Ingreso: diciembre-2005
Ubicación: Camarillo, CA
Mensajes: 242
Antigüedad: 19 años, 2 meses
Puntos: 2
Tienes una consulta Select, esa te debe devolver n numero de filas.
Utiliza un SqlDataReader

Dim myReader As SqlDataReader
myReader = myCommand.ExecuteReader()

Traté de encontrar como contar las filas, pero al parecer no existe ningúna propiedad con el total de filas. La solución que daban era recorrer todo el DataReader y contar las filas una por una.


If myReader.HasRows Then
Dim rows AsInteger = 0
While myReader.Read()
rows += 1
EndWhile
MsgBox(rows)
EndIf

El Data Reader tiene también una propiedad llamada AffectedRows. Está devuelve el número de filas afectadas por un Insert, Update o Delete. No funciona para saber el número devuelto por un Select.
__________________
Alex Reyes
http://jalexreyes.spaces.live.com
  #5 (permalink)  
Antiguo 03/08/2006, 09:22
Avatar de crimauro  
Fecha de Ingreso: mayo-2005
Mensajes: 21
Antigüedad: 19 años, 9 meses
Puntos: 0
Hola freegirl!!

Tal vez lo que esta pasando es que las filas afectadas solo se refieren si los comandos son de tipo Insert,Update o Delete, asi un consulta Select no va afectar ninguna fila y por lo tanto te esta devolviendo 0.
Pero yo personalmente he utilizado el ExecuteNonQuery() y funciona, pero nunca lo he utilizado con un Select.
Creo que para resolver eso seria como lo dice Montezion, por medio de un ExecuteScalar()

Bueno ojala te haya colaborado
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 16:21.