ความ "ที่ไม่ถูกต้องบัฟเฟอร์รับจากไคลเอนต์ ” แจ้งความผิดพลาดในการล็อก SQL Server เมื่อคุณใช้คลาสของตัวให้บริการ SQL Server .NET

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 827366 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

อาการ

เมื่อคุณใช้เป็นกรอบงาน Microsoft .NETSqlClientคลา คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้ในการล็อกข้อผิดพลาดของ Microsoft SQL Server 2000:
ข้อผิดพลาด: 17805 ความรุนแรง: 20 สถานะ: 3
บัฟเฟอร์ที่ไม่ถูกต้องที่ได้รับจากไคลเอนต์
คุณได้รับข้อผิดพลาดที่เกี่ยวข้องดังต่อไปนี้ในแอพลิเคชันไคลเอนต์ Microsoft .NET Framework:
System.Data.SqlClient.SqlException: มีข้อผิดพลาดรุนแรงเกิดขึ้นบนคำสั่งปัจจุบัน ผลลัพธ์ ถ้ามี ควรถูกละทิ้ง

สาเหตุ

ลักษณะการทำงานนี้เกิดขึ้นหากสถานการณ์สมมติต่อไปนี้:
  • คุณใช้เป็นSqlClientคลาสในตัวจบเขียนเมธอด หรือในตัวc#destructor
  • คุณไม่ได้ระบุชัดเจนSQLDbTypeเมื่อคุณสร้างการแจงนับคำSqlParameterวัตถุ เมื่อคุณไม่ได้ระบุที่ชัดเจนSQLDbTypeการแจงนับ ผู้ที่ Microsoft .NET Framework Data ให้สำหรับ SQL Server (SqlClient) พยายามเลือกถูกต้องSQLDbTypeขึ้นอยู่กับข้อมูลที่ไม่ผ่านการแจงนับ SqlClient ไม่สำเร็จ
  • คุณประกาศอินสแตนซ์ของการSqlClientคลาสที่เป็นคงที่ใน c# หรือเป็นการใช้ร่วมกันใน Visual Basic อินสแตนซ์ที่สามารถเข้าถึงได้พร้อม ๆ จากเธรดมากกว่าหนึ่งในแอพลิเคชัน

    หมายเหตุ:ในสภาพแวดล้อมของ ASP.NET หรือ ในบางสภาพแวดล้อมอื่น ๆ เข้ากันได้เป็นไปได้แม้ว่าไม่มีเธรดที่เพิ่มเติมจะถูกสร้างขึ้นได้ในรหัสแอพลิเคชัน
  • ขนาดของพารามิเตอร์ที่คุณได้ระบุในรหัส.NET Framework มีมากกว่าขนาดสูงสุดที่คุณสามารถใช้สำหรับชนิดของข้อมูลใน SQL Server

    ตัวอย่างเช่น ตามการ SQL Server หนังสือออนไลน์nvarcharมีข้อมูลอักขระ Unicode ความยาวตัวแปรอักขระ 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#destructor
  • ระบุการSqlDbTypeการแจงนับสำหรับแบบSqlParameterวัตถุนั้นไม่มีชนิด inferred
  • ระบุขนาดของพารามิเตอร์ที่อยู่ภายในขีดจำกัดของชนิดข้อมูล

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับขนาดสูงสุดสำหรับชนิดข้อมูลที่แตกต่างกัน แวะไปที่เว็บไซต์ของ Microsoft สำหรับนักพัฒนาเครือข่าย (MSDN) ต่อไปนี้:
.aspx http://msdn2.microsoft.com/en-us/library/aa276823 (SQL.80)
.aspx http://msdn2.microsoft.com/en-us/library/aa258271 (SQL.80)

คุณสมบัติ

หมายเลขบทความ (Article ID): 827366 - รีวิวครั้งสุดท้าย: 14 มกราคม 2554 - Revision: 4.0
ใช้กับ
  • Microsoft .NET Framework 1.0
Keywords: 
kbprb kbmt KB827366 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้: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