"Ungültige Buffer Received-Client eingeben Fehlermeldung in SQL Server Protokoll beim Verwenden von SQL Server.NET-Anbieterklassen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 827366 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Wenn Sie eine Microsoft .NET Framework- SqlClient -Klasse verwenden, wird sinngemäß folgende Fehlermeldung im Microsoft SQL Server 2000-Fehlerprotokoll:
Fehler: 17805, Schweregrad: 20, State: 3
Ungültiger Puffer von Client empfangen.
Fehlermeldungen die folgenden entsprechenden in Microsoft .NET Framework-Clientanwendung:
System.Data.SqlClient.SqlException: Auf den aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten. Die Ergebnisse sollten ggf. verworfen werden

Ursache

Dieses Verhalten tritt auf, wenn eine der folgenden Szenarien vorliegt:
  • In einer Finalize -Methode oder einen Destruktor c# verwenden Sie eine SqlClient -Klasse.
  • Sie eine explizite SQLDbType -Enumeration nicht angeben, wenn ein SqlParameter -Objekt zu erstellen. Wenn Sie keine explizite SQLDbType -Enumeration, Microsoft .NET Framework-Datenanbieter für SQL Server (SqlClient) versucht, wählen Sie die richtige SQLDbType -Enumeration anhand der Daten, die übergeben werden. SqlClient ist fehlgeschlagen.
  • Sie deklarieren Sie eine Instanz der SqlClient -Klasse static in c# werden oder freigegebenen in Visual Basic werden. Die Instanz kann gleichzeitig von mehreren Threads in der Anwendung zugegriffen werden.

    Hinweis: In der ASP.NET-Umgebung oder in einigen anderen Umgebungen ist gleichzeitiger Zugriff möglich, auch wenn keine zusätzlichen Threads im Anwendungscode explizit erstellt werden.
  • Die Größe des Parameters, die Sie explizit in .NET Framework-Code angeben ist mehr als die maximale Größe, die Sie für den Datentyp in SQL Server verwenden können.

    Beispielsweise entsprechend zu SQL Server-Onlinedokumentation, Nvarchar ist ein variabler Länge Unicode-Zeichendaten n Zeichen. "n" muss ein Wert zwischen 1 und 4000 sein. Wenn Sie eine Größe, mehr als 4000 für einen Nvarchar -Parameter angeben, erhalten Sie die Fehlermeldung in den Abschnitt "Problembeschreibung" beschriebene.
Der folgende Code auch veranschaulicht, wie diese Fehler auftreten:
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();

}

Lösung

Um diesen Fehler zu beheben, stellen Sie sicher, dass Sie die folgenden Aktionen ausführen:
  • Verwenden Sie eine SqlClient -Klasse nicht in einer Finalize -Methode oder ein C#- Destruktor.
  • Angeben der SqlDbType -Enumeration SqlParameter -Objekt, sodass es keinen hergeleiteten Typ gibt.
  • Geben Sie eine Parametergröße, die innerhalb der Grenzen des Datentyps ist.

Informationsquellen

Weitere Informationen über die maximale Größe für unterschiedliche Datentypen finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Websites:
http://msdn2.microsoft.com/en-us/library/aa276823(SQL.80).aspx
http://msdn2.microsoft.com/en-us/library/aa258271(SQL.80).aspx

Eigenschaften

Artikel-ID: 827366 - Geändert am: Mittwoch, 18. April 2007 - Version: 3.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework 1.0
Keywords: 
kbmt kbprb KB827366 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 827366
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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