"No válido Buffer Received desde cliente ? mensaje de error en SQL Server registro cuando se utiliza clases de proveedor SQL Server.NET

Seleccione idioma Seleccione idioma
Id. de artículo: 827366 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Cuando utiliza una clase de Microsoft .NET Framework SqlClient , recibirá el siguiente mensaje de error en el registro de errores de Microsoft SQL Server 2000:
Error: 17805, gravedad: 20, estado: 3
Búfer no válido recibido del cliente.
Recibirá los siguientes mensajes de error correspondiente en la aplicación cliente de Microsoft .NET Framework:
System.Data.SqlClient.SqlException: Un error grave en el comando actual. Los resultados, si hay alguna, se deben descartar

Causa

Este comportamiento se produce si se cumple una de los siguientes escenarios:
  • Utilizar una clase SqlClient en un método Finalize o en un destructor de C# .
  • No especifique una enumeración SQLDbType explícita cuando se crea un objeto SqlParameter . Cuando no se especifica una enumeración SQLDbType explícita, el proveedor de datos de Microsoft .NET Framework para SQL Server (SqlClient) intenta seleccionar la enumeración SQLDbType correcta basándose en los datos que se pasan. SqlClient es incorrecta.
  • Declare una instancia de la clase SqlClient para ser static en C# o compartido en Visual Basic. La instancia puede obtener acceso a simultáneamente desde más de un subproceso de la aplicación.

    Nota En el entorno de ASP.NET o en algunos otros entornos, acceso simultáneo es posible incluso si no hay subprocesos adicionales se crean explícitamente en el código de la aplicación.
  • El tamaño del parámetro que especificar explícitamente en el código de .NET Framework es mayor que el tamaño máximo que puede utilizar para el tipo de datos en SQL Server.

    Por ejemplo, según a SQL Server Books Online, nvarchar es una datos de caracteres de Unicode de longitud variable de n caracteres. "n" debe ser un valor comprendido entre 1 y 4000. Si especifica un tamaño es más de 4000 para un parámetro de nvarchar , recibirá el mensaje de error descrita en la sección "Síntomas".
El código siguiente muestra también cómo se pueden producir estos errores:
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();

}

Solución

Para resolver estos errores, asegúrese de que hace lo siguiente:
  • No utilice una clase SqlClient en un método Finalize o en un destructor de C# .
  • Especificar la enumeración de SqlDbType del objeto SqlParameter para que no hay ningún tipo inferido.
  • Especificar un tamaño de parámetro que está dentro de los límites del tipo de datos.

Referencias

Para obtener más información acerca del tamaño máximo para tipos de datos diferentes, visite los siguientes sitios Web de 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

Propiedades

Id. de artículo: 827366 - Última revisión: miércoles, 18 de abril de 2007 - Versión: 3.4
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.0
Palabras clave: 
kbmt kbprb KB827366 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 827366

Enviar comentarios

 

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