"Inválido da memória intermédia recebidos do cliente ? mensagem de erro no registo de SQL Server quando utiliza o SQL Server .NET classes de fornecedor

Traduções de Artigos Traduções de Artigos
Artigo: 827366 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sintomas

Quando utiliza uma classe de Microsoft .NET Framework SqlClient , receberá a seguinte mensagem de erro no registo de erro do Microsoft SQL Server 2000:
Erro: 17805, gravidade: 20, estado: 3
Memória intermédia inválida recebida do cliente.
Receber as seguintes mensagens de erro correspondente na aplicação de cliente do Microsoft .NET Framework:
System.data.SqlClient.SqlException: Ocorreu um erro grave no comando actual. Os resultados, se existirem, devem ser eliminados

Causa

Este comportamento ocorre se uma das seguintes situações for verdadeira:
  • Utilizar uma classe SqlClient num método Finalize ou num processo de destruição C# .
  • Não especifique uma enumeração SQLDbType explícita quando cria um objecto SqlParameter . Quando não for especificada uma enumeração SQLDbType explícita, o fornecedor de dados do Microsoft .NET Framework para SQL Server (SqlClient) tenta seleccionar a enumeração SQLDbType correcta baseada nos dados que são transmitidos. SqlClient não tem êxito.
  • Declarar uma instância da classe SqlClient para ser estático no C# ou para ser partilhado no Visual Basic. A instância pode ser acedida em simultâneo a partir de mais do que um thread da aplicação.

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

    Por exemplo, acordo com a SQL Server Books Online, nvarchar é um comprimento variável de dados de carácter Unicode de n caracteres. "n" tem de ser um valor entre 1 e 4000. Se especificar um tamanho que é mais do que 4000 para um parâmetro nvarchar , receberá a mensagem de erro descrita na secção "Sintomas".
Também o seguinte código demonstra como estes erros poderão 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 estes erros, certifique-se de que efectua os seguintes procedimentos:
  • Não utilize uma classe SqlClient num método Finalize ou num processo de destruição C# .
  • Especificar a enumeração de SqlDbType para o objecto SqlParameter para que não existe nenhum tipo inferred.
  • Especificar um tamanho parâmetro que 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 os seguintes Web sites 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

Artigo: 827366 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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