Como obtengo mediante Ado.Net un valor que regresa mi store proced

09/10/2006 - 20:59 por Antonio | Informe spam
Hola:
Estoy iniciando mi cambio de VB 6 a VB Net. pero tengo un problema en VB 6
tenia una linea de codigo similar a esta:

tengo un Store Procedure en sql que me devuelve un valor y en vb 6 yo lo
recibia en una variable.

mivariable = miado.execute(cadena de ejecucion)
en ADO.net como hago para que me devuelva ese valor como debo de correrlo o
con que instruccion ya que el ExecuteNonQuery me devuelve el numero de
registros afectados. pero no el valor que tiene mi store procedure

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion [MVP]
09/10/2006 - 21:34 | Informe spam
"Antonio" wrote in message
news:
Estoy iniciando mi cambio de VB 6 a VB Net. pero tengo un problema en VB 6
tenia una linea de codigo similar a esta:

tengo un Store Procedure en sql que me devuelve un valor y en vb 6 yo lo
recibia en una variable.

mivariable = miado.execute(cadena de ejecucion)
en ADO.net como hago para que me devuelva ese valor como debo de correrlo
o
con que instruccion ya que el ExecuteNonQuery me devuelve el numero de
registros afectados. pero no el valor que tiene mi store procedure



Depende de cómo retorne el valor el procedimiento almacenado. Si lo
devuelve con un "Select valor from...", entonces se recoge con un
ExecuteScalar(). Si se devuelve con un "Return valor", entonces se recoge
como si fuera un parámetro de salida del procedimiento, solo que en el Tipo
del parámetro, en lugar de ponerle "Output" lo pones "ReturnValue".
Respuesta Responder a este mensaje
#2 Antonio
09/10/2006 - 23:23 | Informe spam
Hola Alberto:
Te explico como tengo mis lineas:
en VB. Net tengo una linea similar:

lstrcadsql = "Exec spinsert valor1, valor2, valor3 output"

dim sqlcommand

Variableretorno = CType(lsqlCommand.ExecuteScalar(), Integer)

en SQL
el Store es

create procedure @valor1 int, @valor2 int, @valor3 output

insert into tablas (valor1, valor2) values (@valor1, @valor2)
select @valor3 = 1
...

return @valor3

me sigue mandando error cuando ejecuta estas lineas me dice que no se acepta
el output en executeScalar


"Antonio" wrote:

Hola:
Estoy iniciando mi cambio de VB 6 a VB Net. pero tengo un problema en VB 6
tenia una linea de codigo similar a esta:

tengo un Store Procedure en sql que me devuelve un valor y en vb 6 yo lo
recibia en una variable.

mivariable = miado.execute(cadena de ejecucion)
en ADO.net como hago para que me devuelva ese valor como debo de correrlo o
con que instruccion ya que el ExecuteNonQuery me devuelve el numero de
registros afectados. pero no el valor que tiene mi store procedure


Respuesta Responder a este mensaje
#3 Alberto Poblacion [MVP]
10/10/2006 - 07:45 | Informe spam
"Antonio" wrote in message
news:
lstrcadsql = "Exec spinsert valor1, valor2, valor3 output"

dim sqlcommand

Variableretorno = CType(lsqlCommand.ExecuteScalar(), Integer)

en SQL
el Store es

create procedure @valor1 int, @valor2 int, @valor3 output

insert into tablas (valor1, valor2) values (@valor1, @valor2)
select @valor3 = 1
...

return @valor3

me sigue mandando error cuando ejecuta estas lineas me dice que no se
acepta
el output en executeScalar




Observa que estás devolviendo el valor del procedimiento con un "return"
y no un "select", y ya te dije que en este caso NO se puede usar el
ExecuteScalar, sino que tiene que ser un parámetro del SqlCommand. En el
Procedimiento, el valor de retorno no se debe declarar como parámetro
output; ya lo devuelve el Return por su cuenta.


Te lo corrijo:

create procedure @valor1 int, @valor2 int
as
insert into tablas (valor1, valor2) values (@valor1, @valor2)
declare @resultado int
select @resultado = 1
...
return @resultado
go


Dim cmd as New SqlCommand("spinsert", conexion)
cmd.CommandType=CommandType.StoredProcedure
cmd.Parameters.Add("@valor1", valor1)
cmd.Parameters.Add("@valor2", valor2)
SqlParameter retorno = New SqlParameter("RETURN_VALUE", SqlDbType.Int)
retorno.ParameterType=ParameterType.ReturnValue
cmd.Parameters,Add(retorno)
cmd.ExecuteNonQuery()
Variableretorno = CType(retorno.Value, Integer)
Respuesta Responder a este mensaje
#4 Antonio
10/10/2006 - 14:27 | Informe spam
Muchisimas gracias por tu ayuda... una discupa por tanta pregunta

"Alberto Poblacion [MVP]" wrote:

"Antonio" wrote in message
news:
> lstrcadsql = "Exec spinsert valor1, valor2, valor3 output"
>
> dim sqlcommand
>
> Variableretorno = CType(lsqlCommand.ExecuteScalar(), Integer)
>
> en SQL
> el Store es
>
> create procedure @valor1 int, @valor2 int, @valor3 output
>
> insert into tablas (valor1, valor2) values (@valor1, @valor2)
> select @valor3 = 1
> ...
>
> return @valor3
>
> me sigue mandando error cuando ejecuta estas lineas me dice que no se
> acepta
> el output en executeScalar


Observa que estás devolviendo el valor del procedimiento con un "return"
y no un "select", y ya te dije que en este caso NO se puede usar el
ExecuteScalar, sino que tiene que ser un parámetro del SqlCommand. En el
Procedimiento, el valor de retorno no se debe declarar como parámetro
output; ya lo devuelve el Return por su cuenta.


Te lo corrijo:

create procedure @valor1 int, @valor2 int
as
insert into tablas (valor1, valor2) values (@valor1, @valor2)
declare @resultado int
select @resultado = 1
...
return @resultado
go


Dim cmd as New SqlCommand("spinsert", conexion)
cmd.CommandType=CommandType.StoredProcedure
cmd.Parameters.Add("@valor1", valor1)
cmd.Parameters.Add("@valor2", valor2)
SqlParameter retorno = New SqlParameter("RETURN_VALUE", SqlDbType.Int)
retorno.ParameterType=ParameterType.ReturnValue
cmd.Parameters,Add(retorno)
cmd.ExecuteNonQuery()
Variableretorno = CType(retorno.Value, Integer)





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida