"Inválido buffer recebidos do cliente ? mensagem de erro no log do SQL Server quando você usa classes de provedor do SQL Server .NET

Traduções deste artigo Traduções deste artigo
ID do artigo: 827366 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sintomas

Quando você usa uma classe do Microsoft .NET Framework SqlClient , você receber a seguinte mensagem de erro no log de erro do Microsoft SQL Server 2000:
Erro: 17805, gravidade: 20, estado: 3
Buffer inválido recebido do cliente.
Você recebe as seguintes mensagens de erro correspondente no aplicativo de cliente do Microsoft .NET Framework:
System.Data.SqlClient.SqlException: Ocorreu um erro grave no comando atual. Os resultados, se houver, devem ser descartados

Causa

Esse comportamento ocorre se uma das seguintes situações for verdadeira:
  • Você usa uma classe SqlClient em um método Finalize ou em um destruidor translation from VPE for Csharp .
  • Você não especificar uma enumeração SQLDbType explícita quando você cria um objeto SqlParameter . Quando você não especificar uma enumeração SQLDbType explícita, o Microsoft .NET Framework Data Provider para SQL Server (SqlClient) tenta selecionar a enumeração SQLDbType correta com base nos dados são passados. SqlClient não obtém êxito.
  • Declare uma instância da classe SqlClient para ser estáticos em translation from VPE for Csharp ou para ser compartilhado no Visual Basic. A instância pode ser acessada simultaneamente de mais de um thread no aplicativo.

    Observação No ambiente de ASP.NET ou em alguns outros ambientes, acesso simultâneo é possível mesmo se não há segmentos adicionais são criados explicitamente no código do aplicativo.
  • O tamanho do parâmetro que você especificar explicitamente no código do .NET Framework é mais do que o tamanho máximo que você pode usar para o tipo de dados no SQL Server.

    Por exemplo, de acordo com para SQL Server Books Online, nvarchar é um dados de caracteres de Unicode de comprimento variável de n caracteres. "n" deve ser um valor de 1 a 4000. Se você especificar um tamanho que é mais de 4000 para um parâmetro nvarchar , você receberá a mensagem de erro descrita na seção "Sintomas".
O código a seguir também demonstra como esses erros podem ocorrer:
Stored Procedure
--------------------------

CREATE PROCEDURE spParameterBug @myText Text AS
            Insert Into ParameterBugTable (TextField) Values (@myText)

Code
-------
static void Main(string[] args)
{
       string dummyText=string.Empty;
       for (int n=0; n < /*80*/ 3277; n++)   // change this to 80 to receive the second error that is mentioned earlier in this article.
       {
             dummyText += "0123456789";
       }

        // TO DO: Change data source to match your SQL Server:

       SqlConnection con= new SqlConnection("data source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;persist security info=True;packet size=16384");
       SqlCommand cmd = new SqlCommand("SpParameterBug", con);
      con.Open();
           // Causes error 17805:
      SqlParameter param2 =new SqlParameter("@myText", dummyText);
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.Add(param2);
      try
      {
          cmd.ExecuteNonQuery();
      } 
      catch (Exception err)
      {
         Console.WriteLine(err.ToString());
      }

      Console.ReadLine();

}

Resolução

Para resolver esses erros, certifique-se que você faça o seguinte:
  • Não use uma classe SqlClient em um método Finalize ou em um destruidor translation from VPE for Csharp .
  • Especifique a enumeração SqlDbType para o objeto SqlParameter para que não há nenhum tipo inferido.
  • Especificar um tamanho de parâmetro está dentro dos limites do tipo de dados.

Referências

Para obter mais informações sobre o tamanho máximo para diferentes tipos de dados, visite o seguinte da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/aa276823(SQL.80).aspx
http://msdn2.microsoft.com/en-us/library/aa258271(SQL.80).aspx

Propriedades

ID do artigo: 827366 - Última revisão: quarta-feira, 18 de abril de 2007 - Revisão: 3.4
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.0
Palavras-chave: 
kbmt kbprb KB827366 KbMtpt
Tradução automática
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: 827366

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com