"Недопустимый буфер, полученных от клиента ” сообщение в журнал SQL Server при использовании классов поставщика SQL Server .NET

Переводы статьи Переводы статьи
Код статьи: 827366 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Проблема

При использовании Microsoft .NET FrameworkSqlClientкласс, в журнал ошибок Microsoft SQL Server 2000 появляется следующее сообщение об ошибке:
Ошибка: 17805, уровень опасности: 20, состояние: 3
От клиента получен недопустимый буфер.
Соответствующий следующих сообщений об ошибке появляется в клиентском приложении Microsoft .NET Framework.
System.Data.SqlClient.SqlException: На текущей команды возникла серьезная ошибка. The results, if any, should be discarded.

Причина

Это происходит в том случае, если выполняется одно из следующих причин:
  • Можно использоватьSqlClientкласс вЗавершениеметод илиC#деструктор.
  • Не задан явноSQLDbTypeперечисления, при созданииSqlParameterОбъект. Если не задан явноSQLDbTypeперечисления, поставщик данных Microsoft .NET Framework для SQL Server (SqlClient) пытается выбрать правильныеSQLDbTypeПеречисление, основанное на данных, которое было передано. SqlClient завершается неудачей.
  • Объявите экземплярSqlClientклассастатическиев C# илиобщий доступв Visual Basic. Экземпляр может осуществляться одновременно из нескольких потоков в приложении.

    Примечание.В среде ASP.NET или в некоторых других средах одновременный доступ возможен даже в том случае, если не дополнительные потоки создаются явно в коде приложения.
  • Размер параметра, который явно указать в коде .NET Framework больше, чем максимальный размер, который можно использовать для типа данных в SQL Server.

    Например, в соответствии с SQL Server Books Online,nvarcharпредставляет символьные данные Юникода переменной длины n символов. «n» должно быть числом от 1 до 4000. Если указать размер, то более 4000 дляnvarcharпараметр, появляется сообщение об ошибке, описанное в разделе «Проблема».
Также в следующем коде показано, как могут возникнуть следующие ошибки:
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();

}

Решение

Чтобы устранить эти ошибки, убедитесь, что выполните следующее:
  • Не следует использоватьSqlClientкласс вЗавершениеметод илиC#деструктор.
  • УкажитеSqlDbTypeПеречисление дляSqlParameterобъект, определенный тип не существует.
  • Размер параметра, которые лежат в пределах типа данных.

Ссылки

Для получения дополнительных сведений о максимальный размер для различных типов данных посетите следующий веб-узлов Microsoft Developer Network (MSDN):
.aspx HTTP://msdn2.Microsoft.com/en-us/library/aa276823 (SQL.80)
.aspx HTTP://msdn2.Microsoft.com/en-us/library/aa258271 (SQL.80)

Свойства

Код статьи: 827366 - Последний отзыв: 25 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft .NET Framework 1.0
Ключевые слова: 
kbprb kbmt KB827366 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:827366

Отправить отзыв

 

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