Diego Fernandes Posted September 8, 2013 at 08:34 PM Report #523850 Posted September 8, 2013 at 08:34 PM (edited) Olá a todos... não estou conseguindo fazer a SP retornar 1 valor (id_setor ), no lado do VB já tentei ExecuteScalar, ExecuteNonQuery mas a resposta é do lado do vb.net a resposta é 0 ou ""A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <=,>,>= ou quando ela é usada como uma expressão." //SQL SERVER Express 2012 ALTER PROCEDURE [dbo].[uspSetorProximo] @retorno INT OUTPUT, --aqui vai o valor id_setor @id_op INTEGER as BEGIN DECLARE @id_mapa as INT; SET @id_mapa = (SELECT id_mapa FROM tb_mapa WHERE ID_OP = @id_op) SET @id_mapa = @id_mapa + 1 SET @retorno = (SELECT id_setor FROM tb_mapa WHERE id_mapa = @id_mapa) END '''Visual Studio Express 2012 - vb.net cmd.CommandText = "uspSetorProximo" cmd.Connection = cn Dim input As New SqlParameter With input .ParameterName = "@id_op" .SqlDbType = SqlDbType.Int .Value = ID_OP End With Dim output As New SqlParameter With output .ParameterName = "@retorno" .SqlDbType = SqlDbType.Int .Value = ID_OP .Direction = ParameterDirection.Output End With With cmd 'definindo o comando : o tipo de parâmetro (entra/saida) e o tipo de comando. .Parameters.Add(output) .Parameters.Add(input) .CommandType = CommandType.StoredProcedure End With ' intProximoSetor = CType(cmd.ExecuteScalar, Integer) cmd.ExecuteNonQuery() intProximoSetor = CType(cmd.Parameters("@retorno").Value, Integer) desculpe, não tinha a certeza se minha duvida é exatamente vb.net ou sql...:-) Obrigado a todos. Edited September 8, 2013 at 09:06 PM by thoga31 Formatação do tópico + tags code + GeSHi
nelsonr Posted September 8, 2013 at 09:13 PM Report #523854 Posted September 8, 2013 at 09:13 PM Boas, esse código está correcto. Testei aqui e funciona. O que pode estar a acontecer é os dados na base de dados não estarem de acordo com os selects que estás a fazer dentro da stored procedure Ah, e ali nos selects, para simplificar podes por SELECT TOP 1 @id_mapa = id_mapa FROM tb_mapa WHERE ID_OP = @id_op SELECT TOP 1 @retorno = id_setor FROM tb_mapa WHERE id_mapa = @id_mapa+1 Já agora, quando colocares código aqui no forum, usa as tags
Diego Fernandes Posted September 10, 2013 at 01:01 AM Author Report #523955 Posted September 10, 2013 at 01:01 AM (edited) CRLF obrigado pela dica acima... eu revi todo o código e ao invés de utilizar OUTPUT utilizei sqlParameter com ReturnValue. Obrigado Edited September 10, 2013 at 01:02 AM by Diego Fernandes
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now