Parâmetros de saída não são retornados quando você executa um comando ADO.NET no Visual translation from VPE for Csharp

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 308621
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 308051.

Para uma versão deste artigo do Microsoft Visual C++. NET, consulte 308624.

Este artigo se refere aos seguintes namespaces Microsoft .NET Framework Class Library:
  • System.Data.SqlClient
  • System.Data.OLEDB
Sintomas
Parâmetros de saída não são exibidos ser inicializado ou retornar um valor incorreto quando você executa um comando ADO.NET.
Causa
Esse problema pode ocorrer por dois motivos:
  • Parâmetros de saída são retornados no final do fluxo de dados quando você usa um objeto DataReader .
  • A propriedade de direção do parâmetro é definida não definida corretamente.
Resolução
Para resolver esse problema, use um dos seguintes métodos:
  • Quando você usa um objeto DataReader , você deve fechá-la ou ler até o final dos dados antes de poder exibir os parâmetros de saída.
  • Verifique se a direção do parâmetro é definida para saída ou InputOutput (se o parâmetro é usado no procedimento para enviar e receber dados).
Para obter mais informações sobre como implementar essas soluções, consulte a seção "Mais informação".

Observação : O objeto de parâmetro para o valor de retorno deve ser o primeiro item na coleção Parameters . Além disso, certifique-se de que tipo de dados do parâmetro corresponde ao valor de retorno esperado.
Situação
Esse comportamento é por design.
Mais Informações

Passos para reproduzir o problema

  1. Execute a seguinte consulta no SQL Server Query Analyzer para criar um procedimento armazenado denominado "myProc" no banco de dados Pubs:
    CREATE proc MyProc@out smallint OUTPUTASSelect * from TitlesSelect @out = count(*) from titlesGO					
  2. Inicie o Visual Studio NET..
  3. Crie um novo Windows Application no Visual translation from VPE for Csharp NET.. O Form1 é criado por padrão.
  4. Verifique se seu projeto contém uma referência ao namespace System.Data e adicione uma referência a este espaço para nome se não.
  5. Coloque dois botões de comando no Form1. Altere a propriedade Name do primeiro botão para btnDirection e altere a propriedade Text para direção . Altere a propriedade Name do segundo botão para btnReader e altere a propriedade Text para o leitor .
  6. Usar a instrução usando os namespaces System.Data e sistema de modo que não é necessário para qualificar declarações esses namespaces posteriormente no seu código.
    using System;using System.Data;using System.Data.SqlClient;using System.Data.OleDb;					
  7. Retorne para o modo de formulário e clique duas vezes em direção para adicionar o manipulador de eventos click. Adicione o seguinte código ao manipulador.

    Observação Você deve alterar usuário ID = <uid> e a senha = < senha de alta segurança > para os valores corretos antes de executar esse código. Certifique-se de que <uid> tenha as permissões apropriadas para executar esta operação no banco de dados.
    	String myConnString  = 		"User ID=<UID>;password=<strong password>;Initial Catalog=pubs;Data Source=(local)";	SqlConnection myConnection = new SqlConnection(myConnString);	SqlCommand myCommand = new SqlCommand();	myCommand.CommandType = CommandType.StoredProcedure;	myCommand.Connection = myConnection;	myCommand.CommandText = "MyProc";	myCommand.Parameters.Add("@out", OleDbType.Integer);	//Uncomment this line to return the proper output value.	//myCommand.Parameters["@out"].Direction = ParameterDirection.Output;	try	{		myConnection.Open();		myCommand.ExecuteNonQuery();		MessageBox.Show("Return Value : " + myCommand.Parameters["@out"].Value);	}	catch (Exception ex)	{		MessageBox.Show(ex.ToString());	}	finally	{		myConnection.Close();	}					
  8. Retorne para o modo de formulário e clique duas vezes em leitor para adicionar o manipulador de eventos click. Adicione o seguinte código ao manipulador.

    Observação Você deve alterar usuário ID = <uid> e a senha = < senha de alta segurança > para os valores corretos antes de executar esse código. Certifique-se de que <uid> tenha as permissões apropriadas para executar esta operação no banco de dados.
    	String myConnString  = 		"User ID=<UID>;password=<strong password>;Initial Catalog=pubs;Data Source=(local)";	SqlConnection myConnection = new SqlConnection(myConnString);	SqlCommand myCommand = new SqlCommand();	SqlDataReader myReader;	myCommand.CommandType = CommandType.StoredProcedure;	myCommand.Connection = myConnection;	myCommand.CommandText = "MyProc";	myCommand.Parameters.Add("@out", OleDbType.Integer);	myCommand.Parameters["@out"].Direction = ParameterDirection.Output;	try	{		myConnection.Open();		myReader = myCommand.ExecuteReader();		//Uncomment this line to return the proper output value.		//myReader.Close();		MessageBox.Show("Return Value : " + myCommand.Parameters["@out"].Value);	}	catch (Exception ex)	{		MessageBox.Show(ex.ToString());	}	finally	{		myConnection.Close();	} 					
  9. Modificar a seqüência de conexão (myConnString) em cada um dos exemplos de código anterior, conforme apropriado para seu ambiente.
  10. Salve seu projeto.
  11. No menu Debug , clique em Iniciar para executar seu projeto.
  12. Clique em direção . Observe que o valor incorreto é retornado para o parâmetro de saída.
  13. Para resolver esse problema, descomente a linha de código que define a propriedade de direção para o parâmetro de saída. Execute o projeto e em seguida, clique em direção . Observe que o parâmetro de saída é corretamente retornado.
  14. Clique em leitor . Observe que o valor incorreto é retornado para o parâmetro de saída.
  15. Para resolver esse problema, descomente a linha de código que fecha o objeto de leitor . Execute o projeto e, em seguida, clique em leitor . Observe que o parâmetro de saída é corretamente retornado.
Referências
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
308049COMO: Chamar um procedimento armazenado parametrizado usando o ADO.NET e Visual Basic .NET
Esvaziar zero parâmetro disponível em branco

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 308621 - Última Revisão: 12/11/2006 20:14:48 - Revisão: 4.6

Microsoft ADO.NET 2.0, Microsoft ADO.NET 1.0, Microsoft Visual C# 2005, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbmt kbtshoot kbnofix kbprb kbsqlclient kbstoredproc kbsystemdata KB308621 KbMtpt
Comentários