"Non valido buffer ricevuti dal client ? messaggio di errore nel log di SQL Server quando si utilizzano classi di provider SQL Server .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 827366 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sintomi

Quando si utilizza una classe di Microsoft .NET Framework SqlClient , è visualizzato il seguente messaggio di errore nel log degli errori di Microsoft SQL Server 2000:
Errore: 17805, gravità: 20, stato: 3
Buffer non valido ricevuto dal client.
Si visualizzati i seguenti messaggi di errore corrispondente nell'applicazione client di Microsoft .NET Framework:
System.Data.SqlClient.SqlException: Si è verificato un errore grave nel comando corrente. I risultati, se presente, devono essere scartati

Cause

Questo comportamento si verifica se una delle seguenti condizioni è vera:
  • Si utilizza una classe di SqlClient in un metodo Finalize o in un distruttore in C# .
  • Quando si crea un oggetto SqlParameter non si specifica un'enumerazione SQLDbType esplicita. Quando non si specifica un'enumerazione SQLDbType esplicita, il provider di dati Microsoft .NET Framework per SQL Server (SqlClient) tenta di selezionare l'enumerazione SQLDbType corretto basato sui dati che viene passati. SqlClient ha esito negativo.
  • Dichiarare un'istanza della classe SqlClient per essere static in C# o per essere condivisi in Visual Basic. L'istanza sono accessibili contemporaneamente da più thread nell'applicazione.

    Nota Nell'ambiente di ASP.NET o in alcuni altri ambienti, accesso simultaneo è possibile anche se nessun thread aggiuntivi sono creati in modo esplicito nel codice dell'applicazione.
  • La dimensione del parametro che specifica in modo esplicito nel codice .NET Framework è più la dimensione massima che è possibile utilizzare per il tipo di dati in SQL Server.

    Ad esempio, in base a SQL documentazione in linea di server, nvarchar contiene un dati di tipo carattere Unicode a lunghezza variabile di n caratteri. "n" deve essere compreso da 1 a 4000. Se si specifica una dimensione che più di 4000 per un parametro di nvarchar , riceverai il messaggio di errore è descritto nella sezione "Sintomi".
Nell'esempio di codice seguente viene inoltre illustrato come questi errori potrebbero verificarsi:
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();

}

Risoluzione

Per risolvere questi errori, verificare che è effettuare le seguenti operazioni:
  • Non utilizzare una classe di SqlClient in un metodo Finalize o in un distruttore in C# .
  • È possibile specificare l'enumerazione di SqlDbType per l'oggetto SqlParameter in modo che nessun tipo derivato.
  • Specificare una dimensione di parametro entro i limiti del tipo di dati.

Riferimenti

Per ulteriori informazioni sulla dimensione massima per tipi di dati diversi, visitare i seguenti siti Web MSDN (informazioni in lingua inglese):
http://msdn2.microsoft.com/en-us/library/aa276823(SQL.80).aspx
http://msdn2.microsoft.com/en-us/library/aa258271(SQL.80).aspx

Proprietà

Identificativo articolo: 827366 - Ultima modifica: mercoledì 18 aprile 2007 - Revisione: 3.4
Le informazioni in questo articolo si applicano a:
  • Microsoft .NET Framework 1.0
Chiavi: 
kbmt kbprb KB827366 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 827366
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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