"Không hợp lệ nhận bộ đệm được từ khách hàng" lỗi báo trong SQL Server đăng nhập khi bạn sử dụng SQL Server.NET cung cấp các lớp học

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:827366
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
TRIỆU CHỨNG
Khi bạn sử dụng một Microsoft.NET Framework SqlClient lớp, bạn nhận được thông báo lỗi sau đây trong Microsoft SQL Server 2000 lỗi đăng nhập:
Lỗi: 17805, mức độ nghiêm trọng: 20, Nhà nước: 3
Không hợp lệ bộ đệm nhận được từ khách hàng.
Bạn nhận được các sau thông báo lỗi tương ứng trong Microsoft.Khách hàng NET Framework ứng dụng:
System.Data.SqlClient.SqlException: A Southern lỗi đã xảy ra vào lệnh hiện hành. Kết quả, nếu có, nên bị loại bỏ
NGUYÊN NHÂN
Hành vi này xảy ra nếu một trong các kịch bản sau đây là sự thật:
  • Bạn sử dụng một SqlClient lớp trong một Hoàn thành phương pháp hoặc trong một C# Destructor.
  • Bạn không chỉ định một rõ ràng SQLDbType liệt kê khi bạn tạo một SqlParameter đối tượng. Khi bạn không chỉ định một rõ ràng SQLDbType đếm của Microsoft.NET Framework dữ liệu nhà cung cấp cho SQL Server (SqlClient) cố gắng chọn đúng SQLDbType liệt kê dựa trên các dữ liệu được thông qua. SqlClient là không thành công.
  • Bạn tuyên bố một thể hiện của các SqlClient lớp học được tĩnh trong C# hoặc là chia sẻ trong Visual Basic. Trường hợp có thể được truy cập đồng thời từ nhiều hơn một thread trong ứng dụng.

    Chú ý Trong ASP.NET môi trường hoặc trong một số môi trường khác, truy cập đồng thời có thể ngay cả khi không có chủ đề bổ sung được tạo ra một cách rõ ràng trong ứng dụng mã.
  • Kích thước của các tham số mà bạn chỉ định một cách rõ ràng trong các.NET Framework mã là lớn hơn kích thước tối đa mà bạn có thể sử dụng cho các kiểu dữ liệu trong SQL Server.

    Ví dụ, theo SQL Máy chủ cuốn sách trực tuyến, nvarchar là dữ liệu ký tự Unicode biến độ dài n ký tự. "n" phải là một giá trị từ 1 đến 4000. Nếu bạn chỉ định một kích thước là hơn 4000 cho một nvarchar tham số, bạn nhận được thông báo lỗi được mô tả trong các "Triệu chứng" phần.
Các mã sau đây cũng chứng tỏ như thế nào những lỗi có thể xảy ra:
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();}
GIẢI PHÁP
Để giải quyết các lỗi này, hãy chắc chắn rằng bạn làm việc sau:
  • Không sử dụng một SqlClient lớp trong một Hoàn thành phương pháp hoặc trong một C# Destructor.
  • Chỉ rõ các SqlDbType liệt kê cho các SqlParameter đối tượng như vậy mà không có loại inferred.
  • Chỉ định một kích thước tham số đó là trong giới hạn của các kiểu dữ liệu.
THAM KHẢO
Để biết thêm thông tin về kích thước tối đa cho khác nhau loại dữ liệu, truy cập vào các trang Web mạng nhà phát triển của Microsoft (MSDN) sau đây:

Thuộc tính

ID Bài viết: 827366 - Xem lại Lần cuối: 12/08/2015 04:27:11 - Bản sửa đổi: 2.0

Microsoft .NET Framework 1.0

  • kbnosurvey kbarchive kbprb kbmt KB827366 KbMtvi
Phản hồi