您目前已離線,請等候您的網際網路重新連線

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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本: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) 網站:

警告:本文為自動翻譯

內容

文章識別碼:827366 - 最後檢閱時間:12/08/2015 04:27:11 - 修訂: 3.4

Microsoft .NET Framework 1.0

  • kbnosurvey kbarchive kbmt kbprb KB827366 KbMtzh
意見反應