"Neplatný vyrovnávací paměti přijaté z klienta ” chybová zpráva v protokolu serveru SQL Server při použití třídy zprostředkovatele SQL Server .NET

Překlady článku Překlady článku
ID článku: 827366 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Použijete-li rozhraní Microsoft .NET Framework SqlClient třídy, zobrazí následující chybová zpráva v protokolu chyb Microsoft SQL Server 2000:
Chyba: 17805, stupeň závažnosti: 20, stát: 3
Přijatých od klienta neplatná vyrovnávací paměť.
Obdržíte následující chybové zprávy odpovídající klientské aplikace rozhraní Microsoft .NET Framework:
System.data.SqlClient.SqlException: Na aktuálním příkazu došlo ke závažné chybě. Výsledky, případné by měly být zahozeny

Příčina

K tomuto chování dochází, pokud platí jedna z následujících scénářů:
  • Do metody Finalize nebo destruktoru C#, použít třídy SqlClient.
  • Při vytváření objektu SqlParameter nezadáte explicitní výčtu SQLDbType. Pokud nezadáte explicitní SQLDbType výčtu, zprostředkovatele dat Microsoft .NET Framework pro SQL Server (SqlClient) pokusí vybrat správný SQLDbType výčtu založené na datech, která je předána. SqlClient neproběhne úspěšně.
  • Je-li deklarovat instance třídy SqlClientstatické v jazyce C# nebo být sdílené v jazyce Visual Basic. Instance lze současně přistupovat z více než jednoho podprocesu v aplikaci.

    Poznámka: V prostředí ASP.NET nebo v některých jiných prostředích souběžný přístup je možné, i v případě, že žádné další podprocesy jsou vytvořeny explicitně v kódu aplikace.
  • Velikost parametru, explicitně určíte v rozhraní .NET Framework kód je větší než maximální velikost, které lze použít pro typ dat na serveru SQL Server.

    Například podle na SQL Server Books Online, nvarchar údaj proměnnou délkou Unicode znaku n znaků. "n", musí mít hodnotu od 1 do 4000. Zadáte-li velikost je větší než 4000 pro parametr nvarchar, zobrazí chybová zpráva, která je popsána v části "Příznaky".
Následující kód také ukazuje, jak tyto chyby může dojít k:
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();

}

Řešení

Chcete-li tyto chyby vyřešit, ujistěte se, proveďte následující:
  • Třída SqlClient použít metody Finalize nebo v destruktoru C#.
  • Výčtu SqlDbType pro objekt SqlParameter určit, aby je bez typu inferred.
  • Zadejte velikost parametr, který je v mezích datového typu.

Odkazy

Další informace o maximální velikosti pro různé datové typy na webech 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

Vlastnosti

ID článku: 827366 - Poslední aktualizace: 18. dubna 2007 - Revize: 3.4
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework 1.0
Klíčová slova: 
kbmt kbprb KB827366 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:827366

Dejte nám zpětnou vazbu

 

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