「 無效緩衝區接收從用戶端 」 錯誤訊息在 SQL Server 記錄當您使用 SQL Server.NET 提供者類別

文章翻譯 文章翻譯
文章編號: 827366 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

徵狀

當您使用 [Microsoft.NET Framework SqlClient 類別在 Microsoft SQL Server 2000 錯誤記錄檔中收到下列錯誤訊息:
錯誤: 17805,嚴重性: 20 狀態: 3
從用戶端接收了無效的緩衝區。
Microsoft.NET Framework 用戶端應用程式出現下列對應的錯誤訊息:
System.Data.SqlClient.SqlException: 上目前的命令發生的嚴重錯誤。結果如果有任何,應該被捨棄

發生的原因

如果其中一種下列案例,就會發生這種行為:
  • 您可以使用 SqlClient 類別 Finalize 方法中或在 C# 解構函式。
  • 當您建立 SqlParameter 物件時,請勿指定明確 SQLDbType 列舉型別。當您未指定明確 SQLDbType 列舉,[Microsoft.NET Framework 資料提供者為 SQL Server (SqlClient) 嘗試選取正確的 SQLDbType 列舉根據傳入的資料。SqlClient 不成功。
  • 您宣告 SqlClient 類別為 靜態 C# 中,或無法 共用 在 Visual Basic 的執行個體。可從應用程式中的多個執行緒同時存取執行個體。

    附註在 ASP.NET 環境或在其他環境中,可能是並行存取即使沒有額外的執行緒在應用程式的程式碼中明確建立。
  • 在.NET Framework 程式碼中明確指定的參數的大小大於最大可用於在 SQL Server 資料型別。

    例如根據到 SQL Server 線上叢書 》,nvarchar 是的 n 個字元的可變長度 Unicode 字元資料。「 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();

}

解決方案

如果要解決這些錯誤,請確定您執行下列:
  • Finalize 方法中] 或 [C# 解構函式中,再使用 SqlClient 類別。
  • 指定 SqlParameter 物件的 SqlDbType 列舉型別,讓沒有任何推斷的型別。
  • 指定參數的大小是限制內的資料型別。

?考

如需有關的不同資料型別大小上限的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站:
http://msdn2.microsoft.com/en-us/library/aa276823(SQL.80).aspx
http://msdn2.microsoft.com/en-us/library/aa258271(SQL.80).aspx

屬性

文章編號: 827366 - 上次校閱: 2007年4月18日 - 版次: 3.4
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.0
關鍵字:?
kbmt kbprb KB827366 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:827366
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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